你能在第二个声明中 `= delete` 一个模板函数吗?

Can you `= delete` a templated function on a second declaration?

考虑以下代码:

template <typename T> int foo();
template <typename T> int foo() = delete;

这是有效的 C++11 吗?

...在 GodBolt.

上查看全部内容

所以哪些编译器是正确的,哪些编译器是 s@#$%e ? :-)

GCC 和 MSVC 有一个错误。

[dcl.fct.def.delete]

4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...

我认为这也代表实例化的声明和定义。由于引用已删除的函数是一个硬错误,因此必须尽快将其声明为已删除。