3

私の個人的な観点からは、コンパイルしないか、少なくとも警告を表示する必要があるサンプルを作成しましたが、Visual Studio 2017 は警告を表示しません。サンプルは次のとおりです。

#include <stdexcept>

struct Foo {
    Foo(int i) { throw std::runtime_error("Oh no:("); }
    Foo(float f) {}
};

struct Bar {
    Bar() {}
};

struct Baz {
    Baz() : foo(5.0f) {}

    Bar bar;
    Foo foo = Foo(3);
    Bar bar2;
};

int main()
{
    Baz baz;
}

私の観点からは (ただし、私は言語弁護士ではありません)、foo の 2 つの初期化 (インプレースと初期化子リスト) はあいまいです。では、この場合のルールは何ですか?

4

1 に答える 1