std::tuple_size
でも動作するので、を使用できますstd::array
!ここを参照してください。単に使用してください:
std::tuple_size<Type>::value == 0
Type
が空か空std::tuple<>
かを確認しますstd::array<T,0>
。
Type
上記の場合、どちらでもstd::tuple
ない場合に何が起こるかという疑問が残りstd::array
ます。私が見る一般的なアプローチはこれです:
constexpr bool IsNotTupleOrArray =
!std::is_class<Type>::value ||
std::is_same<Type,ExcludeThisClass>::value ||
sizeof(Type)>1 || // non-portable, works for GCC 4.8+
...;
std::conditional< IsNotTupleOrArray,
std::false_type,
std::tuple_size<Type> >::type::value;
これは基本的に、他のタイプを明示的に除外する必要があることを意味します。たとえば、ポインタなどのis_class<Type>
すべての基本的なタイプを除外します。int