Ответ 1
Это должно сделать это, не допуская опечаток. Полное определение дается в стандарте (два на самом деле: старое и новое), а я сделал именно это: просто скопировать официальную версию в свой собственный заголовок, а затем обратиться к моим специальным требованиям и/или поддерживать старый gnu std lib, но компилятор ссылается на ссылки rvalue.
Для адреса @T.C. беспокойство, все же полезно иметь возможность писать мои собственные типы только для перемещения и иметь возможность использовать их, например. возврат из функций, даже если поставляемые контейнеры не знают об этом. Классы класса Boost делают, и вы можете переопределить конфигурацию, чтобы сообщить Boost, что у вас есть & &, если вы поставляете все std:: move, std:: forward и еще что-то, что ему нужно. Я также получил гибридный подход, используя собственные ссылки rvalue и эмуляцию Boost move, работающую одновременно, для совместимости с кодом, скомпилированным с Boost как обычно настроенным.