#pragma once #include <type_traits> template <typename...> struct is_one_of_implem { static constexpr bool value = false; }; template <typename F, typename S, typename... T> struct is_one_of_implem<F, S, T...> { static constexpr bool value = std::is_same<F, S>::value || is_one_of_implem<F, T...>::value; }; template<typename... T> constexpr bool is_one_of = is_one_of_implem<T...>::value;