:
#include <utility>
#include <iostream>
template<typename T>
struct isValidImageFormatImpl
{
static constexpr bool match = std::is_same<T, float>::value
or std::is_same<T, unsigned char>::value;
using type = std::conditional_t<match, std::true_type, std::false_type>;
};
template<typename T>
using isValidImageFormat = typename isValidImageFormatImpl<T>::type;
int main()
{
std::cout << isValidImageFormat<float>() << '\n';
std::cout << isValidImageFormat<int>() << '\n';
static_assert(std::is_same<isValidImageFormat<float>, std::true_type>(), "");
static_assert(std::is_same<isValidImageFormat<int>, std::false_type>(), "");
}
の予想される出力。
#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>, "!");
}
'のstd :: is_same :: [値]は、ので、あなたの全体' typedef'タイプではないと 'typename'ビジネスがしても意味がありません:C++ 14ので、簡単に変数のテンプレートを使用することができますで始まる。 –