diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2022-08-24 18:09:52 +0200 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2022-08-24 18:09:52 +0200 |
commit | e6f439cb43ee51b13ed4d29ec84ac5450556b163 (patch) | |
tree | 91c61c93cd3873c57a15448d4ef376d188f7706c /src/development/c++/meta3.cc | |
parent | 6f6fef7bb61712038220a7607447d38689ad6978 (diff) | |
download | notes-e6f439cb43ee51b13ed4d29ec84ac5450556b163.tar.gz notes-e6f439cb43ee51b13ed4d29ec84ac5450556b163.zip |
c++: add any_of meta fn example
Diffstat (limited to 'src/development/c++/meta3.cc')
-rw-r--r-- | src/development/c++/meta3.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/development/c++/meta3.cc b/src/development/c++/meta3.cc new file mode 100644 index 0000000..5dce54a --- /dev/null +++ b/src/development/c++/meta3.cc @@ -0,0 +1,22 @@ +// Copyright (C) 2022 johannst + +#include <type_traits> + +template<typename T, typename... U> +struct any_of : std::false_type {}; + +// Found our type T in the list of types U. +template<typename T, typename... U> +struct any_of<T, T, U...> : std::true_type {}; + +// Pop off the first element in the list of types U, +// since it didn't match our type T. +template<typename T, typename U0, typename... U> +struct any_of<T, U0, U...> : any_of<T, U...> {}; + +// Convenience template variable to invoke meta function. +template<typename T, typename... U> +constexpr bool any_of_v = any_of<T, U...>::value; + +static_assert(any_of_v<int, char, bool, int>, ""); +static_assert(!any_of_v<int, char, bool, float>, ""); |