0
我有類似下面的類:顯示爲什麼std :: is_nothrow_move_assignable取決於析構函數的存在?
class C {
public:
C() : ... {}
~C() {}
Member_1 m_1;
// ...
Member_N m_N;
};
兩個特殊的成員函數聲明爲唯一的。
現在,
static_assert(std::is_nothrow_move_assignable<Member_1>::value);
// ...
static_assert(std::is_nothrow_move_assignable<Member_N>::value);
都滿意。然而,
static_assert(std::is_nothrow_move_assignable<C>::value);
斷言。如果我刪除空的析構函數,它會通過。
析構函數與移動賦值運算符有什麼關係?新的五項規則?
編譯器是GCC 4.9.3和-std=c++0x
(出於歷史原因)。
標記析構函數爲no。 – Jarod42
@ Jarod42:析構函數是隱含的,但不包括 –
這可能是相關的:https://gcc.gnu.org/bugzilla/show_bug.cgi?id = 56191? (或簡單地http://stackoverflow.com/questions/15721544/destructors-and-noexcept其中指向那裏) –