You really don't need a structure. Starting with C ++ 14, you can easily use a variable template:
#include <type_traits>
template<typename...>
constexpr bool isValidImageFormatVar = false;
template<typename T, typename U, typename... O>
constexpr bool isValidImageFormatVar<T, U, O...> = std::is_same<T, U>::value || isValidImageFormatVar<T, O...>;
template<typename T>
constexpr bool isValidImageFormat = isValidImageFormatVar<T, float, unsigned char>;
int main() {
static_assert(isValidImageFormat<float>, "!");
static_assert(isValidImageFormat<unsigned char>, "!");
static_assert(not isValidImageFormat<int>, "!");
}
source
share