次の例を検討してください。
#include <iostream>
#include <type_traits>
template <typename Type>
struct Something
{
template <typename OtherType>
static constexpr bool same()
{return std::is_same<Type, OtherType>::value;}
};
template <class Type>
struct Example
{
static_assert(Type::template same<double>(), "ERROR");
};
int main()
{
Example<Something<double>> example;
return 0;
}
関数を実行して、渡されたstatic_assert
型が何らかの条件を満たしているかどうかをチェックしsame()
ます。
ここで、複数Types
を に渡すことができると考えてExample
ください:
#include <iostream>
#include <type_traits>
template <typename Type>
struct Something
{
template <typename OtherType>
static constexpr bool same()
{return std::is_same<Type, OtherType>::value;}
};
template <class... Types>
struct Example
{
static_assert(/* SOMETHING */, "ERROR");
};
int main()
{
Example<Something<double>> example;
return 0;
}
すべてのタイプで条件が検証されているかどうかを確認する代わりに、機能する構文はありますSOMETHING
か (ヘルパー関数の束なし: この方法で実行できることはわかっていますが、別の方法があるかどうか疑問に思います (どこかで単純なアンパックを使用するなど)。 ..))