Sembra suggerire qui What requirements must std::map key classes meet to be valid keys? e, in alcuni altri post, che il tipo di chiave di una srd :: map deve avere un operatore di assegnazione. Tuttavia non sono stato in grado di trovare quel requisito nello standard.Requisito dell'operatore di assegnazione per il tipo di chiave in std :: map
#include <map>
struct Foo
{
Foo& operator=(const Foo&) = delete;
int id;
};
bool operator<(const Foo&, const Foo&) { return(false); }
int main(int, char**)
{
std::map<Foo,int> a;
std::map<Foo,int> b;
a = b; // Should this work if Foo does not have an assignment operator?
return(false);
}
È possibile che compila con GCC 4.9 e Visual Studio 2013, ma non riesce, lamentando la mancanza di un operatore di assegnazione, con clangore 3.5 su una casella di Ubuntu 14.10 con il seguente comando "clang ++ -std = C++ 11 -stdlib = libC++ code.cpp ". Clang riesce quando si utilizza la libreria standard GCC. Sospetto che la libreria standard clang sia interrotta qui.
++ 1 Posso pensare a poche ragioni pratiche per essere necessario. Questo incarico dovrebbe essere fatto facilmente con il costrutto di copia, per esempio. Hmm. – Yakk