次のコード スニペットがあるとします。
class Foo {};
Foo makeFoo() { return Foo{}; }
int main()
{
Foo myFoo{makeFoo()};
}
の単一行がの戻り値で の移動コンストラクターを使用mainして宣言および定義/初期化することを期待します。myFooFoomakeFoo()
clang++ただし、 3.5.1 (C++14 モードでコンパイル)から次のエラーが発生します。
error: excess elements in struct initializer
Foo myFoo{makeFoo()};
^~~~~~~~~
1 error generated.
何が起きてる?「構造体初期化子」とは正確には何を意味しますか?それは POD のデフォルト (引数なし) コンストラクターですか? move コンストラクターが呼び出されないのはなぜですか?