如何判断函数模板中 T 的赋值运算符是否抛出异常?
How to find out whether an assignment operator of T in a function template throws an exception?
这是我的函数模板:
template <typename T>
void f(vector<T> &a) noexcept(noexcept( /* ??? */ ))
我想指定此函数不会抛出异常,因为 T
的赋值运算符 =
具有 noexcept
规范。有办法吗?
你可以这样做:
template<typename T>
void f(std::vector<T>& a) noexcept(std::is_nothrow_copy_assignable<T>::value)
{...}
如果复制分配 T
值本身已声明 noexcept
,它会在 noexcept
上设置条件。您还可以进一步考虑移动分配 T
。
这是我的函数模板:
template <typename T>
void f(vector<T> &a) noexcept(noexcept( /* ??? */ ))
我想指定此函数不会抛出异常,因为 T
的赋值运算符 =
具有 noexcept
规范。有办法吗?
你可以这样做:
template<typename T>
void f(std::vector<T>& a) noexcept(std::is_nothrow_copy_assignable<T>::value)
{...}
如果复制分配 T
值本身已声明 noexcept
,它会在 noexcept
上设置条件。您还可以进一步考虑移动分配 T
。