2

次のコード スニペットがあるとします。

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 コンストラクターが呼び出されないのはなぜですか?

4

2 に答える 2