Да, выражение инициализатора по умолчанию является временным объектом, и оно будет привязано к ссылке rvalue. Однако вам необходимо пропустить временные объекты через std::move
, чтобы получить их для привязки к ссылке.
Обычно передача чего-либо через std::move
указывает, что оно будет уничтожено вызываемой функцией. Стандарт заходит так далеко, что называет результат std::move
«истекающим значением»; хотя для его истечения не существует реальной семантической необходимости, это довольно сильное соглашение.
Итак, вы можете сделать это, но будьте осторожны.
Если присмотреться к вашему примеру, вы хотите сохранить ссылку на b
внутри a
, что означает, что некуда постоянно сохранять предложенное значение по умолчанию, если не использовался аргумент. Вы бы сохранили ссылку на уничтоженный временный. Так что, к сожалению, я не могу по-настоящему адаптировать ваш пример ...