#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
}
Выпуск:Почему [std :: is_move_assignable] не ведет себя так, как ожидалось?
Если
b
верно, тоv = *m4.begin();
должно быть в порядке.
Вопрос:
Почему
std::is_move_assignable
себя не так, как ожидалось?
Сообщения об ошибках: (3.8 + Clang Visual Studio 2015 Обновление 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
Скорее всего, это ошибка с 'std :: is_move_assignable_v' вашей реализации http://melpon.org/wandbox/permlink/9DNHpi8cKFTF5uEH – Danh
@ Danh должен был сказать, прежде чем было неопределенное поведение в примере, сейчас существует более оператор произвольного доступа [] на мультимажете. – paweldac
@paweldac Это время неопределенного поведения, он спросил, почему этот код нельзя скомпилировать. – Danh