#include <unordered_map>
#include <type_traits>
int main()
{
std::unordered_multimap<int, string> m{ { 1, "hello" } };
auto b = std::is_move_assignable_v<decltype(*m.begin())>;
// b is true
auto v = *m4.begin(); // ok
v = std::move(*m4.begin()); // compile-time error
}
Ausgabe:Warum verhält sich [std :: is_move_assignable] nicht wie erwartet?
Wenn
b
wahr ist, dann solltev = *m4.begin();
in Ordnung sein.
Frage:
Warum verhält sich
std::is_move_assignable
nicht wie erwartet?
Fehlermeldungen: (Clang 3.8 + Visual Studio 2015-Update 3)
error : cannot assign to non-static data member 'first' with const-qualified type 'const int' first = _Right.first; ~~~~~^ main.cpp(119,5) : note: in instantiation of member function 'std::pair<const int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator=' requested here v = *m4.begin(); // error
Es ist wahrscheinlich ein Fehler mit 'std :: is_move_assignable_v' Ihrer Implementierung http://melpon.org/wandbox/permlink/9DNHpi8cKFTF5uEH – Danh
@Danh musste sagen, bevor es ein undefiniertes Verhalten in Beispiel gab, gibt es jetzt gerade keine Direktzugriffsoperator [] auf Multimap. – paweldac
@paweldac Es ist Laufzeit undefiniertes Verhalten, fragte er, warum dieser Code nicht kompiliert werden kann – Danh