如果我從test(test const&) =delete;
改變test
拷貝構造函數test(test const&) =default;
但下面的代碼編譯罰款與GCC 4.7.2(MinGW的)的std :: unordered_map ::佈設問題與私人/刪除拷貝構造函數
#include <unordered_map>
#include <tuple>
struct test
{
test() =default;
private:
test(test const&) =delete;
};
int main()
{
std::unordered_map<char, test> map;
map.emplace(
std::piecewise_construct,
std::forward_as_tuple('a'),
std::forward_as_tuple()
);
}
,模板錯誤嘔吐似乎抱怨const test&
不可轉換爲test
(文本here)。不應該工作?或者,如果不是,他們是不是應該給出一個錯誤?
關閉,但沒有雪茄:) LWG 2005只適用於'insert'而非'emplace',程序因GCC 4.7.2失敗的原因是它不會執行訪問檢查作爲模板參數推演的一部分在C++ 03中是必需的),所以'is_constructible'由於私有構造函數而導致訪問失敗。 GCC 4.8實現C++ 11規則並在模板參數推導期間檢查訪問 – 2013-02-12 16:10:38
您可以通過使用G ++ 4.7預處理代碼(因此它使用4.7中的庫)來確認差異不是由於標準庫中的任何更改而導致的,然後編譯它與4.8,在這種情況下,程序工作,證明它是編譯器而不是庫改變 – 2013-02-12 16:20:27