例如,clang
不编译该代码,这是因为,低于struct A
的缺省默认的构造,A() = default;
不被认为是用户提供的。默认的默认构造函数,为什么不是用户提供的默认构造函数?
struct A{ A() = default; };
const A a;
但是,如果你看一下[dcl.fct.def.general]/1你会看到:
功能体:
构造函数初始化程序选择复合语句
功能试块
= default ;
= delete ;
也就是说,= default;
是默认的构造函数A::A()
,这是相同的话说,函数体上述定义A() = default;
相当于A(){}
为{}
是默认构造函数的主体。
顺便说一下,g++
编译上面的代码片段,但是我知道g++
在这方面还有其他问题,根据Jonathan Wakely的this comment。
奇怪,你说,[clang失败](http://coliru.stacked-crooked.com/a/45816775ce659464),[gcc编译](http://coliru.stacked-crooked.com/a/ 137a9ea1c836152b)。 VS2015也是如此。 – wally
用户提供的显式默认类似于struct A {A();}; A :: A()=默认;' – 0x499602D2