c++ - 如何判断函数模板中 T 的赋值运算符是否抛出异常?

标签 c++ c++11 noexcept

这是我的函数模板:

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

关于c++ - 如何判断函数模板中 T 的赋值运算符是否抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30690479/

相关文章:

c++ - 从零开始的 Lua/C++ 绑定(bind)

c++ - 同时就地 std::sort 键 vector 和值 vector

c++ - 使用 g++ 4.8.2 时,tan() 计算比 sin()/cos() 长两倍

c++ - 析构函数和 noexcept

c++ - std::accumulate 可以抛出吗?

c++ - C++ 标准是否要求 C 链接函数为 `noexcept` ?

C++由于多次包含头文件而重新定义

c# - 如何将数据从一个 UnmanagedMemoryStream 复制到另一个

c++ - 在 C++11 的模板化函数中处理 void 变量

c++ - 在函数返回之前解锁互斥锁可以增加并发吗?