Ответ 1
Вы ищете noexcept(std::is_nothrow_move_constructible<T>::value)
:
http://en.cppreference.com/w/cpp/types/is_move_constructible
У нас была такая ситуация и мы задавались вопросом о том, как это исправить.
template<typename T>
struct A : T {
A(T &&t) noexcept(noexcept(T(std::move(t))))
:T(std::move(t))
{ }
};
Это, к сожалению, не удается скомпилировать, поскольку конструктор перемещения T защищен, и нам разрешено вызывать его только в списке инициализации конструктора для *this
. Каковы обходные пути для выполнения этой работы или есть даже стандартный способ для этого?
Вы ищете noexcept(std::is_nothrow_move_constructible<T>::value)
:
http://en.cppreference.com/w/cpp/types/is_move_constructible