【发布时间】:2019-10-17 22:58:38
【问题描述】:
考虑以下代码:
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 ? :-)
【问题讨论】:
-
那么它是有效的会很奇怪,因为第一行说的是“嗯,有一个名为 foo 的函数在某处定义”,这与 delete 正好相反。
-
@OznOg @einpoklum 臭名昭著地提出了非常奇怪的问题:)。但是发现 gcc 的 bug 很棒!
-
no pb,这只是我的闲聊;这个问题对我来说完全有效。
-
MSVC 也接受这个:gcc.godbolt.org/z/CFIEgb
-
@πάνταῥεῖ:我收到的最讨人喜欢的 SE 评论!谢谢:-)
标签: c++ gcc clang nvcc compiler-bug