c++ - 模板特化中的双模板<>

标签 c++ templates

为什么下面的代码可以编译?我没有特化模板类的模板成员函数,所以只有一个 template<>应该使用。然而,g++ 编译时没有任何警告,clang++ 只给出警告

warning: extraneous template parameter list in template specialization

template<typename T>
struct S{};

template<> template<> // why can we do this? 
struct S<int>{};

int main()
{

}

最佳答案

因为语法允许,模板特化部分下好像也没有什么禁止的:

来自 [gram.temp]

explicit-specialization:

template < > declaration

来自 [gram.dcl]

declaration:

[...]

explicit-specialization

语法过于松懈的事实已经在active issues list (#293) 自 2001 年以来。

关于c++ - 模板特化中的双模板<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927196/

相关文章:

c++ - 编译的 exe 不会通过我的自定义计划 cmd 运行?

c++ - 模板的模板成员的消歧模板关键字 : when exactly?

c++ - 检查子字符串的快速方法

c++ - 友元函数和包含循环

c++ - 具有未命名命名空间且声明了相同变量的命名空间

C++:使用指向派生类的指针进行虚函数调用仍然有一个vlookup

javascript - 模型属性未统一命名的 Backbone 集合和模板

c++ - 类成员函数的 SFINAE(一个编译另一个不编译)

c++ - 什么情况下实例化模板的参数不可用?

c++ - C 接口(interface)作为带有 Boost 后端的 API