以下結構編譯失敗下C++ 11由於這樣的事實,我已聲明的移動賦值運算符作爲noexcept
:我可以強制默認的特殊成員函數是否爲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
。另見this question。
我相信這已在C++ 14中修復(請參閱library defect 2103)。
我的問題是,有沒有辦法讓我強制noexcept
默認的移動賦值賦值操作符,而不必自己定義它?
如果這是不可能的,有沒有一種方法可以欺騙std::vector<int>
成爲noexcept
移動賦值,以便noexcept(true)
被傳遞給我的結構?
是否好,如果'data'是一個'的std ::矢量'其中'A'不是默認的'std :: allocator '? –
aschepler
我期待將代碼複雜性保持在最低限度。我期望使用自定義分配器比其他編碼人員更難理解,而不是簡單的非默認移動賦值運算符。 – marack
也就是說,如果'std :: vector'中的'A'是一個簡單的默認分配器的內聯包裝器,它可能會工作... –
marack