如何查明函数模板中的赋值操作符T是否抛出异常

How to find out whether an assignment operator of T in a function template throws an exception?

本文关键字:是否 抛出异常 赋值操作符 何查明 函数模板      更新时间:2023-10-16

下面是我的函数模板:

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