#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"
}
