struct X {
X() {}
X(X&&) { }
};
X global_m;
struct Converts {
operator X&& () const { return std::move(global_m); }
};
私は以下がうまくいくはずだと信じています:
X x { Converts{} };
X の引数が 1 つのコンストラクターは 1 つだけX&&
です。Converts オブジェクトは一時的なもので、 に変換されX&&
ます。では、clang-3.3 から次のエラー メッセージが表示されるのはなぜですか。
// error: "candidate constructor not viable: no known conversion from 'Converts' to 'X &&' for 1st argument"
次のように明示的に演算子を呼び出すことができます。
X x { Converts{}.operator struct X&& () }; // this works.
残念ながら、私が知る限り g++ に基づくideoneで動作します。現在稼働中のオンラインのclangコンパイラはありますか?