由于我已将移动赋值运算符声明为,以下结构无法在 C++11 下编译noexcept
:
struct foo
{
std::vector<int> data;
foo& operator=(foo&&) noexcept = default;
};
编译器生成的默认移动赋值运算符是noexcept(false)
因为它std::vector<int>
的移动赋值也是noexcept(false)
。这又是由于默认分配器已std::allocator_traits<T>:: propagate_on_container_move_assignment
设置为std::false_type
. 另请参阅此问题。
我相信这已在 C++14 中得到修复(请参阅库缺陷 2103)。
我的问题是,有没有办法让我强制noexcept
使用默认的移动赋值赋值运算符而不必自己定义它?
如果这是不可能的,有没有办法可以欺骗std::vector<int>
移动noexcept
分配,以便noexcept(true)
传递给我的结构?