【发布时间】:2015-12-23 10:00:43
【问题描述】:
在测试 VS2015 C++ 编译器时,我偶然发现了一个带有 default 关键字的奇怪错误。如果我这样做:
struct Dummy
{
Dummy() = default;
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
我明白了
错误 C2280:“Dummy::Dummy(const Dummy &)”:试图引用已删除的函数
注意:见'Dummy::Dummy'的声明
但是如果我使用一个空的构造函数
struct Dummy
{
Dummy() {}
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
代码编译。使用g++ 或clang 运行第一个示例不会产生错误。
为什么在 VS2015 中使用默认构造函数会尝试使用 g++ 或 clang 中没有的复制构造函数?
【问题讨论】:
-
你从
const Dummy& r2{Dummy()};得到什么? -
@BenVoigt 这是同样的错误。
标签: c++ visual-studio-2015 language-lawyer