如何确定函数模板中T的赋值运算符是否抛出异常?

时间:2015-06-07 05:54:03

标签: c++ c++11 noexcept

这是我的功能模板:

template <typename T>
void f(vector<T> &a) noexcept(noexcept( /* ??? */ ))

我想指定此函数不会抛出异常,因为=的赋值运算符T具有noexcept规范。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

template<typename T> 
void f(std::vector<T>& a) noexcept(std::is_nothrow_copy_assignable<T>::value)
{...}

如果复制分配noexcept值本身已声明为T,则会在noexcept上设置条件。您可以进一步考虑移动分配T