次のコードがあります。
struct X
{
int a, b;
};
class Y
{
public:
Y(const X& x) : x_{x} {}; // C2797 error
private:
X x_;
};
MSVC2013 Update 3 でコンパイルすると、C2797 エラーが発生します。中括弧を括弧 (つまりx_(x)
) に置き換えると、プログラムは正常にコンパイルされます。
なぜこれが起こるのですか?このコンパイラの動作は C++11 に準拠していますか? C++14 はどうですか?
編集:より明確にするために、x_{x}
上記が標準に従って呼び出すX(std::initializer_list)
必要があるかどうか、またはそれが呼び出しの有効な構文であるかどうかはわかりませんX(const X&)
。私の知る限り、後者です。私は正しいですか?