#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 +的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不得不說,在示例中存在未定義的行爲之前,隨機訪問操作符[]在multimap上。 – paweldac
@paweldac它的運行時間未定義的行爲,他問爲什麼這個代碼不能編譯 – Danh