永远不会使用以下Foo
的专业化; Clang发出警告,GCC没有。
template <typename>
struct Foo { static const int value = 0; };
template <template <typename...> class C, typename ...Ts>
struct Foo<C<Ts..., int>> { static const int value = 1; };
为什么这不会导致错误?
以下代码演示了这一点:
template <typename...>
struct Bar {};
static_assert(!Foo<Bar<char,double,int>>::value,"");