为什么未使用的部分特化没有错误?

时间:2014-08-25 20:27:05

标签: c++ c++11 variadic-templates template-specialization

永远不会使用以下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,"");

1 个答案:

答案 0 :(得分:2)

定义并不使用它不是错误。如果是,则在#include<vector>的每个程序中,您必须使用vector<bool>