#include<utility>
using namespace std;
struct X {
X() {}
X(X&&) { }
};
X global_m;
struct Converts {
operator X&& () const { return std::move(global_m); }
};
int main() {
//bar ( Converts{} );
X x1 { Converts{}.operator struct X&& () }; // works.
X m2 { Converts{} }; // error: "candidate constructor not viable: no known conversion from 'Converts' to 'X &&' for 1st argument"
}
I2luY2x1ZGU8dXRpbGl0eT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBYIHsKICAgICAgICBYKCkge30KICAgICAgICBYKFgmJikgeyB9Cn07ClggZ2xvYmFsX207CgpzdHJ1Y3QgQ29udmVydHMgewogICAgICAgIG9wZXJhdG9yIFgmJiAoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1vdmUoZ2xvYmFsX20pOyB9Cn07CgppbnQgbWFpbigpIHsKICAgICAgICAvL2JhciAgICAgICAgICAoIENvbnZlcnRze30gKTsKICAgICAgICBYIHgxIHsgQ29udmVydHN7fS5vcGVyYXRvciBzdHJ1Y3QgWCYmICgpIH07IC8vIHdvcmtzLgogICAgICAgIFggbTIgeyBDb252ZXJ0c3t9IH07IC8vIGVycm9yOiAiY2FuZGlkYXRlIGNvbnN0cnVjdG9yIG5vdCB2aWFibGU6IG5vIGtub3duIGNvbnZlcnNpb24gZnJvbSAnQ29udmVydHMnIHRvICdYICYmJyBmb3IgMXN0IGFyZ3VtZW50Igp9Cg==