Assume I have a wrapper type
template <typename T>
struct X {/*..*/};
and I cannot just X(X&&) = default
because I have to do non-trivial stuff there.
However, I want it to be noexcept
but only in case that T(T&&)
is noexcept
. This can be tested with ::std::is_nothrow_move_constructible
.
I'm at a loss how to conditionally enable one version of the constructor or the other depending on a constexpr
. I suppose there could be a way to use SFINAE, but I don't see how to apply it to ctors.
The noexcept
specifier accepts any boolean constant expression, so you can but your type trait check in there directly:
template <typename T>
struct X {
X(X&&) noexcept(std::is_nothrow_move_constructible<T>::value) {}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With