Tying per compilare il seguente programma con Visual Studio 10, ricevo molti errori di compilazione:problema con std :: make_tuple in 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;
}
Errore 1 Errore C2664: 'std :: basic_string < _Elem, _Traits, _Ax> :: basic_string (const std :: basic_string < _Elem, _Traits, _Ax> &) ': impossibile convertire il parametro 1 da' const key_t 'a' const std :: basic_string < _Elem, _Traits, _Ax > & 'c: \ programmi (x86) \ microsoft visual studio 10.0 \ vc \ include \ tuple 127 1 tupla
proveniente dalla linea:
std::cout << i->second << std::endl;
cosa strana è, come almeno dal mio punto di vista, se cambio queste righe:
auto k = std::make_tuple("one", "two");
the_map[k] = "the value";
a
the_map[std::make_tuple("one", "two")] = "p";
la compila il programma. Quindi la mia domanda è, naturalmente, perché? Credo che abbia qualcosa a che fare con make_tuple e spostare la semantica - ma non capisco che cosa ..
Grazie - funziona e il mio codice originale sembrerà a posto con la tua correzione. – baardk
Nota che puoi anche scrivere 'the_map [std :: move (k)] =" il valore "' ma questo "distruggerà" la tua variabile 'k' (guarda alcuni articoli sulla semantica del movimento se non vedi cosa Intendo per distruggere). – Tomaka17
Bello. Ho postato il problema su alcuni siti di MS Connect, in modo che possano controllare se si tratta di un bug o di cosa. – baardk