Burada, What requirements must std::map key classes meet to be valid keys? ve bazı diğer iletilerde, bir srd :: map'in Anahtar türünün bir atama işlecine sahip olması önerilir. Ancak bu gerekliliği standartta bulamadım.Anahtar türü için atama operatörü gereksinimi 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);
}
yukarıda GCC 4.9 ve Visual Studio 2013 ile derler, ancak aşağıdaki komutu çalışan bir Ubuntu 14.10 kutuyu clang 3.5 ile, bir atama operatör eksikliğinden şikayetçi başarısız "çınlama ++ -std = C++ 11 -stdlib = libC++ code.cpp ". Clang, GCC standart kitaplığını kullanırken başarılı olur. Clang standart kütüphanesinin burada kırıldığından şüpheleniyorum.
++ 1 İhtiyaç duyulması için küçük pratik nedenler düşünebilirim. Bu ödev, örneğin kopya oluşturma ile kolayca yapılmalıdır. Hmm. – Yakk