struct X {
X() {}
X(X&&) { }
};
X global_m;
struct Converts {
operator X&& () const { return std::move(global_m); }
};
我相信以下应该有效:
X x { Converts{} };
X 只有一个单参数构造函数。它需要一个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.
对我来说不幸的是,它适用于ideone,据我所知,它基于 g++ 。目前是否有任何在线clang编译器正在运行?