Видимо ошибка на самом деле исходит из строки the_map[k] = "the value";
Когда вы используете оператор [] на карте, библиотека пытается создать объект std::pair<Key,Value>
. В вашем случае это становится std::pair<std::tuple<std::string,std::string>,std::string>
.
Однако, если вы используете промежуточную переменную k
, конструктор std :: pair, который вызывается: (скопированный из стандартной lib)
_Pair_base(const _Ty1x& _Val1, _Ty2x&& _Val2)
: first(_Val1), second(_STD move(_Val2))
{ // construct from specified values
}
Этот конструктор пытается создать копию вашего key_t. К сожалению, реализация кортежей MSVC ++ в данный момент прослушивается, и копия не может быть скомпилирована (см. Также: C ++ 0x: разрешены ли кортежи кортежей? )
Я могу диагностировать больше, потому что эта реализация не только содержит ошибки, но и очень сложна.
Кортежи Boost должны работать, но не иметь оператора <, поэтому вы не можете их использовать. </p>
«Лучшее» решение на данный момент - написать the_map.insert(std::make_pair(k, "the value"));