2016-04-03 12 views
3

default既定のコンストラクタをconstexprと宣言したい場合は、Clang 3.8とGCC 5.3でコンパイラエラーが発生します。 this stackoverflowの質問によると、それだけで正常に動作する必要があります。しかしconstexpr既定の既定のコンストラクタ

struct A 
{ 
    constexpr A() = default; 

    int x; 
}; 

Error: defaulted definition of default constructor is not constexpr 

は、あなたが実際に何が起こっているかの任意の手掛かりを持っていますか?

答えて

6

xは未初期化のままなので、オブジェクトはコンパイル時には構築できません。あなたはX初期化する必要が

struct A 
{ 
    constexpr A() = default; 

    int x = 1; 
}; 
+0

ええ、私はまた、その間にそれを考え出しました。それはSOの質問/回答を参照してかなり不完全で誤解を招く。 – plasmacel

+0

@plasmacel回答が必要な情報をカバーしています...最後に太字で 'constexpr'を書かないと、constexprの条件を満たしている場合にのみconstexprを返します。最後の段落では、あなたの関数が条件を満たしていないときにコンパイルエラーを取得したい場合に 'constexpr'を書くことができれば、 –