Ce code ne peut pas compiler dans Visual Studio 2013:std :: unordered_map avec des références en tant que valeurs ne fonctionne pas?
#include <iostream>
#include <unordered_map>
class MyClass
{
public:
char a;
};
int main()
{
std::unordered_map<int, MyClass&> MyMap;
MyClass obj;
obj.a = 'a';
MyMap.emplace(1, obj);
std::cout << MyMap[1].a;
}
Avec ces messages d'erreur:
Error 1 error C2440: 'initializing' : cannot convert from 'int' to 'MyClass &' c:\program files (x86)\microsoft visual studio 12.0\vc\include\tuple 746
Error 2 error C2439: 'std::pair<const _Kty,_Ty>::second' : member could not be initialized c:\program files (x86)\microsoft visual studio 12.0\vc\include\tuple 746
Quand je change à des pointeurs, il compile bien. Les références sont-elles invalides en tant que types de valeur dans std :: unordered_map?
Le même code fonctionne très bien avec boost :: unordered_map.
En guise de supposition, est-ce parce que vous utilisez emplace, qui utilise directement la valeur donnée dans le constructeur, mais votre classe n'a pas de constructeur de copie? –
@Ben comment copier une référence? – sehe
@sehe, ahhhh, ça ne fait rien. Je devrais lire plus attentivement. –