我在Visual Studio 2015中面临一个非常奇怪的错误消息。以下精简了代码:
struct A
{
A(int val = 0)
:
x(val)
{}
int x = 0;
};
struct B: A
{
static int y;
};
int B::y = 1;
struct C: B
{
};
int main()
{
C c;
return 0;
}
在Clang上编译没有任何问题。但是,Visual Studio 2015 IntelliSense提供以下错误消息:
the default constructor of "C" cannot be referenced -- it is a deleted function
我是否在代码中丢失了某些内容,或者这是Visual Studio中的错误?
更新
根据此处的评论和答案,我在Microsoft Connect上打开了一个错误报告。
这是一个Intellisense错误。clang和gcc都接受此代码,并且Webcompiler联机Visual c ++编译器也接受此代码。
草案C ++ 14标准部分12.1
[class.ctor]说,如果出现以下情况,将删除类的默认默认构造函数:
- X是类联合的类,具有一个带有非平凡默认构造函数的变体成员,
- 没有大括号或相等初始化程序的任何非静态数据成员都是引用类型,
- 没有大括号等号初始化程序的任何const限定类型(或其数组)的非变量非静态数据成员都没有用户提供的默认构造函数,
- X是一个并集,并且其所有变体成员都是const限定类型(或其数组),
- X是非联盟类,任何匿名联合成员的所有成员均为const限定类型(或其数组),
- 任何具有潜在构造子对象,除了带有大括号或均衡初始化器的非静态数据成员外,其类类型为M(或其数组),并且M没有默认构造函数或重载分辨率(13.3),应用于M的默认构造函数结果模棱两可或从默认默认构造函数中删除或无法访问的函数中,或
- 任何可能构造的子对象都具有带有析构函数的类型,该类型从默认的默认构造函数中删除或无法访问。
在此均不适用。
更新资料
感谢您报告此问题。该修补程序应该在Visual Studio 2015的下一个更新中可用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句