bit*_*ask 9 c++ template-meta-programming noexcept
假设我有一个包装类型
template <typename T>
struct X {/*..*/};
Run Code Online (Sandbox Code Playgroud)
我不能X(X&&) = default因为我必须在那里做非平凡的事情.
不过,我希望它是noexcept,但只有在这种情况下T(T&&)是noexcept.这可以测试::std::is_nothrow_move_constructible.
我不知道如何有条件地启用一个版本的构造函数或另一个版本取决于a constexpr.我想可能有办法使用SFINAE,但我不知道如何将它应用于ctors.
Tar*_*ama 10
该noexcept说明符接受任何布尔常量表达式,所以你可以,但在有直接的类型特点的检查:
template <typename T>
struct X {
X(X&&) noexcept(std::is_nothrow_move_constructible<T>::value) {}
};
Run Code Online (Sandbox Code Playgroud)