我在寫一些代碼,它有一個通用容器,要求元素爲nothrow_move_constructible
。爲什麼`boost :: container :: flat_set`不是`nothrow_move_constructible`?
我決定添加一個static_assert
來強制執行此操作,以防萬一。
當我使用boost::container::flat_set
時,我現在無法編譯。
我認爲這只是一個疏忽,我需要一個更近的提升verison,但似乎實際上他們故意使其不能安全地移動:
在這裏看到的文檔:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost/container/flat_set.html
您可以看到他們確實更新了它以使用R值參考並將swap
標記爲noexcept
,但他們選擇不進行移動。 看來,移動任務是有條件的noexcept
。該條件似乎取決於值類型和分配器在某種程度上。
什麼可能是不可移動可構造的理由?這只是一個疏忽嗎?
注意:我在這裏打開了一張票:https://svn.boost.org/trac/boost/ticket/12319 –
注意:維護人員已經打了補丁,看到了機票:) –