【发布时间】:2018-12-14 17:18:13
【问题描述】:
考虑以下代码:
void foo() { return void(); }
void bar() { return void{}; }
foo() 编译,但 bar() doesn't(在 GodBolt 上使用 GCC 8.2 和 clang 7.0)。
为什么?
【问题讨论】:
-
因为它是无效的语法。不知道为什么
void()有效。你真的会写这样的代码吗? -
返回
T{};的模板代码? -
@ShafikYaghmour 链接的相关问题是对您问题的令人惊讶的完整答案。
-
@John:首先,
void()是函数式转换,而不是 C 风格的转换。其次,泛型代码中的统一void是C++ 中的一个重要习惯用法。令人惊讶的是有人觉得这很奇怪。
标签: c++ c++11 void default-constructor