Atar para compilar el programa siguiente con Visual Studio 10, consigo gran cantidad de errores de compilación:Problema con std :: make_tuple en C++ 0x
#include "stdafx.h"
#include <tuple>
#include <string>
#include <map>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::tuple<std::string, std::string> key_t;
typedef std::map<key_t, std::string> map_t;
map_t the_map;
auto k = std::make_tuple("one", "two");
the_map[k] = "the value";
auto q = std::make_tuple("one", "two");
auto i = the_map.find(q);
std::cout << i->second << std::endl;
return 0;
}
de error 1 error C2664: 'std :: basic_string < _Elem, _Traits, _Ax> :: basic_string (const std :: basic_string < _Elem, _Traits, _Ax> &) ': no se puede convertir el parámetro 1 de' const key_t 'a' const std :: basic_string < _Elem, _Traits, _Ax > & 'c: \ archivos de programa (x86) \ microsoft visual studio 10.0 \ vc \ include \ tuple 127 1 tupla
procedentes de la línea:
std::cout << i->second << std::endl;
Lo extraño es, como mínimo, desde mi punto de vista, si cambio de estas líneas:
auto k = std::make_tuple("one", "two");
the_map[k] = "the value";
a
the_map[std::make_tuple("one", "two")] = "p";
la programa compila Entonces mi pregunta es, por supuesto, ¿por qué? Creo que tiene algo que ver con make_tuple y mover la semántica - pero no entiendo lo que ..
Gracias - funciona y mi código original se verá bien con su solución. – baardk
Tenga en cuenta que también puede escribir 'the_map [std :: move (k)] =" el valor "' pero esto "destruirá" su variable 'k' (consulte algunos artículos sobre la semántica de movimientos si no ve qué Quiero decir por destruir). – Tomaka17
Agradable. Publiqué el problema en algún sitio de MS Connect, para que puedan verificar si es un error o qué. – baardk