考虑以下代码:
template <typename T> int foo();
template <typename T> int foo() = delete;
这是有效的C ++ 11吗?
...在GodBolt上查看全部内容。
那么哪些编译器正确,哪些编译器是s @#$%e? :-)
答案 0 :(得分:14)
GCC和MSVC有一个错误。
[dcl.fct.def.delete]
4 ...已删除的函数定义应为该函数的第一个声明,或者,对于功能模板的显式特化,应为该特化的第一个声明...
我相信其中也代表实例化的声明和定义。由于引用已删除的函数是一个硬错误,因此必须将其声明为尽快删除。