【发布时间】:2016-03-31 11:20:22
【问题描述】:
这段代码:
class A {
public:
A() = default;
};
int main()
{
const A a;
return 0;
}
可以在 Visual C++(来自 VS 2015 Update 2)和 GCC(5.3.1)中编译而没有错误,但不能使用 Clang 编译,它给出了这个错误:
test.cpp:8:13: error: default initialization of an object of const type
'const A' without a user-provided default constructor
const A a;
^
{}
1 error generated.
谁是对的,clang 还是 gcc 和 MSVC? 其他编译器的行为是错误吗?
附言。 const A a{}; 编译时所有三个都没有错误。
如果我们定义空构造函数也是一样的:A::A() {}。
PPS。这不是重复的。我强调实际问题。
更新在 MSVC 中提交了一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/2538005 S.T.L.表示他们正在修复它们以符合 clang 测试:https://twitter.com/StephanTLavavej/status/715923311796953089
【问题讨论】:
-
为什么要将默认构造函数定义为默认值?如果你默认不要声明它,或者声明它并定义它。
-
@AsierSánchezRodríguez 因为我可以。这不是关于的问题。
-
this one 怎么样?
标签: c++ gcc visual-c++ clang language-lawyer