たとえば、clang
は、struct A
以下のデフォルトのデフォルトコンストラクタA() = default;
がユーザー提供とはみなされないため、このコードをコンパイルしません。デフォルトのデフォルトのコンストラクタですが、なぜユーザが提供するデフォルトのコンストラクタではないのですか?
struct A{ A() = default; };
const A a;
しかし、あなたは[dcl.fct.def.general]/1を見れば、あなたはわかります
を機能-ボディ:
ctorの初期化子オプト化合物文
機能トライブロックである
= default ;
= delete ;
、= default;
が言うように同じであるデフォルトコンストラクタA::A()
、用関数本体です上記定義A() = default;
はA(){}
と等価であり、{}
は、デフォルトコンストラクタの本体です。ところで
は、g++
は、上記のスニペットをコンパイルしますが、私はg++
はジョナサンWakelyによってthis commentによると、この点で他の問題を持って知っています。
奇妙なことに、あなたが言うように、[clangは失敗する](http://coliru.stacked-crooked.com/a/45816775ce659464)、[gccコンパイル](http://coliru.stacked-crooked.com/a/ 137a9ea1c836152b)。 VS2015も同様です。 – wally
明示的にデフォルトに設定されたユーザ提供のものは、 'struct A {A();};のようになります。 A :: A()= default; ' – 0x499602D2