Dea*_*con 4 c++ templates variadic-templates
是否可以专门化这个模板声明:
template <class TYPE, class... ARGS> TYPE Foo(ARGS... args) {
static_assert(false);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些例如:
template <> int Foo<int>(float args) {
return 42;
}
Run Code Online (Sandbox Code Playgroud)
...但是当我尝试使用它时,我总是点击静态断言:
auto value = Foo<int>(1.5f);
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
只要未实例化,就不允许编写仅有效的模板.这违反了标准中的以下规则:
如果无法为模板生成有效的专业化,并且未实例化该模板,则模板格式错误,无需诊断.
另一方面,如果你体内有某些东西,那就好了
static_assert(sizeof(TYPE) != sizeof(int));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,模板是有效的,并且您的代码将被编译,因为实际上将使用显式特化而不是主模板.请参阅http://coliru.stacked-crooked.com/a/238b979fd10c62c0