2015-11-29 19 views
8

に、私は本当に奇妙なエラーメッセージが直面しています2015年、次のストリップダウンコード:「デフォルトコンストラクタが参照することはできません」の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; 
} 

はクランに問題なくコンパイルされます。しかし、Visual Studioの2015 IntelliSenseが、次のエラーメッセージを表示します。

the default constructor of "C" cannot be referenced -- it is a deleted function 

は、私は私のコードで何かをしないのですか、これは、Visual Studioのバグですか?ここにコメントや回答に基づいて


UPDATE

私はマイクロソフト接続にbug reportを開きました。

+3

コンパイルは正しくありますか?IntelliSenseのエラーについては心配しません。時には混乱し、誤って問題を報告します。 –

+1

これはVisual Studioの(Intellisenseの)バグです。すべてのVisual Studioのバグは真です。私の知る限り。 Intellisenseは、コンパイラと同じ分析機構を使用しません。しかし、将来変化する可能性があります。 –

+0

私はIntellisenseバグの1週間をSOで見ているような気がします。 –

答えて

7

これはIntellisenseのバグです。 clangとgccの両方がこのコードを受け入れます(webcompiler an online Visual c++ compiler accepts this code)。

ドラフトC++ 14標準セクション 12.1 [class.ctor]は、クラスの不履行デフォルトコンストラクタがあれば削除されたと言う:

  • Xが持っている労働組合のようなクラスがあります
  • ブレースまたは同等イニシャライザを持たない任意の非静的データメンバーは参照型です
  • const修飾型の非可変非staticデータメンバブレースなしの配列(またはその配列) ユーザ提供既定のコンストラクタを有する-orequal-イニシャライザは、
  • Xは組合されておらず、その変異体の全ては、const修飾型(またはその配列)である、
  • Xは、非組合クラスであります任意の匿名共用体メンバのすべてのメンバがconst修飾型(またはその配列)である場合は、
  • 潜在的に構築された任意のサブオブジェクト(ブレースまたはイニシャライザを持つ非静的データメンバを除く)は、クラス型M配列 )のいずれかであり、Mにデフォルトのコンストラクタまたはオーバーロードがなく、 の解像度(13.3)がMのデフォルトコンストラクタに適用され、 のあいまいさ、または0から削除またはアクセスできない関数デフォルトのデフォルトコンストラクタまたは
  • 潜在的に構築されたサブオブジェクトは、デフォルトのデフォルトの コンストラクタから削除またはアクセスできないデストラクタを持つ型を持ちます。

ここでは該当しません。

応答だったbug report filed by the OP

更新:

は、この問題を報告していただき、ありがとうございます。修正はVisual Studio 2015の次回のアップデートで利用可能になるはずです。

+0

'cl'(Visual Studioで使用される実際のC++コンパイラ)がコードを受け入れるかどうか知っていますか?それは、gccやclangよりもVSユーザーにとっては関係があります。 –

+1

@BenVoigt [webcompilerはコードを受け入れる](http://webcompiler.cloudapp.net/)残念ながら、私はライブリンクを作ることができません。私は彼らがそれを追加することを望む、それらの残りの部分は、ライブリンクとそれを有用な機能を作ることができます。 –

+0

Visual Studioが動揺した理由を理解できませんでしたが、個人データメンバーをConstとして宣言していました。 Constフィールドをグローバルスコープに移動すると問題が解決しました – Luminaire

関連する問題