У меня есть программа, которая дает мне смутное ошибку, поэтому вместо того, размещать сотни строк кода, которые я сделал эту упрощенную версию:C++ - unique_ptr в пределах unordered_map приводит к ошибкам
#include <unordered_map>
#include <memory>
#include <utility>
struct s
{
int height;
std::unordered_map<std::string, std::unique_ptr<s>> children;
};
void InitWD(s &wd_ptr, int height, std::unordered_map<std::string, std::unique_ptr<s>> children) //Initialize a WindowData
{
wd_ptr.children=children;
wd_ptr.height=height;
}
int main()
{
s test;
test.height=1;
test.children=std::unordered_map<std::string, std::unique_ptr<s>>();
std::unique_ptr<s> ptr(new s);
InitWD(*ptr, 2, std::unordered_map<std::string, std::unique_ptr<s>>());
test.children.emplace("two", std::move(ptr));
}
ошибка (GCC 4,8 с C++ 11) относительно либо unique_ptr
или unordered_map
, я считаю:
error: use of deleted function 'constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::basic_string<char>; _T2 = std::unique_ptr<s>]'
Возможно, где-то в коде unique_ptr
копируется? Это единственное, что я мог подумать, что может вызвать такую ошибку.
Любая помощь приветствуется!
Это действительно интересно; g ++ обычно показывает, какая строка кода, но она [явно не для этого примера] (http://coliru.stacked-crooked.com/a/80e9b5ae43362e32), даже для g ++ v6.3 (http: //coliru.stacked -crooked.com/a/c19194654682c731). Должно ли это быть зарегистрировано как ошибка в gcc? – Justin
@ Justin Я так думаю. Вы можете подать ошибку, если хотите, хотя я, вероятно, не стал бы беспокоиться, поскольку я полагаю, что это, вероятно, будет дубликат существующей ошибки, и я слишком ленив, чтобы проверить. – Brian