你能在第二个声明中 `= delete` 一个模板函数吗?
Can you `= delete` a templated function on a second declaration?
考虑以下代码:
template <typename T> int foo();
template <typename T> int foo() = delete;
这是有效的 C++11 吗?
- GCC (9.1) 说:是的!
- clang (8.0) 说:不!
- nvcc (9.2) 说:不!
- MSVC (19.20) 说:是的! (在C++14模式下,不支持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...
我认为这也代表实例化的声明和定义。由于引用已删除的函数是一个硬错误,因此必须尽快将其声明为已删除。
考虑以下代码:
template <typename T> int foo();
template <typename T> int foo() = delete;
这是有效的 C++11 吗?
- GCC (9.1) 说:是的!
- clang (8.0) 说:不!
- nvcc (9.2) 说:不!
- MSVC (19.20) 说:是的! (在C++14模式下,不支持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...
我认为这也代表实例化的声明和定义。由于引用已删除的函数是一个硬错误,因此必须尽快将其声明为已删除。