【发布时间】:2016-10-22 18:13:01
【问题描述】:
例如clang不会编译这段代码,因为下面struct A的默认默认构造函数A() = default;不被认为是用户提供的。
struct A{ A() = default; };
const A a;
但如果您查看[dcl.fct.def.general]/1,您会看到:
函数体:
ctor-initializeropt复合语句
功能尝试块= default ;= delete ;
即= default;是默认构造函数A::A()的函数体,也就是说上面的定义A() = default;等价于A(){}为@987654335 @是默认构造函数的主体。
顺便说一句,g++ 编译了上面的 sn-p,但我知道 g++ 在这方面还有其他问题,根据 Jonathan Wakely 的this comment。
【问题讨论】:
-
奇怪,正如你所说,clang fails,gcc compiles。 VS2015 也是如此。
-
用户提供的明确默认的看起来像
struct A{A();}; A::A()=default;
标签: c++ c++14 language-lawyer