Я был удивлен, увидев, что следующие компиляции:
struct C {
operator C&&() {
std::cerr << "ref'd\n";
throw std::runtime_error("what is happening?");
}
};
Тип с оператором для собственного преобразования rvalue-reference. Однако я не могу заставить оператора позвонить, используя то, что, как я думал, может это сделать. Передача значения функции, принимающей ссылку rvalue, не выполняется, а вызов std::move
объекта не вызывает ничего.
Почему этот код может вообще скомпилироваться и есть ли способ запустить эту функцию?
clang дает warning: conversion function converting 'C' to itself will never be used
с ссылкой или без ссылки на тип.