나는 type_traits
주변에 놀고 있었는데, 나는 std::string
의이 이상한 특성을 발견 :std :: string not assign assignable 또는 comparable move?
$ cat a.cpp
#include <string>
#include <type_traits>
static_assert(std::is_nothrow_move_assignable<std::string>::value, "???");
static_assert(noexcept(std::declval<std::string>() == std::declval<std::string>()), "???");
$ g++ -std=c++14 a.cpp
a.cpp:4:1: error: static assertion failed: ???
static_assert(std::is_nothrow_move_assignable<std::string>::value, "???");
^
a.cpp:5:1: error: static assertion failed: ???
static_assert(noexcept(std::declval<std::string>() == std::declval<std::string>()), "???");
^
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609
그러나 cppreference이 noexcept
을 표시하는 move assignment operator 및 comparison operators 주장합니다.
내가 잘못 했나요? 이거 버그 야?
아마도 나쁜 구현 일 수 있습니다. GCC 6에서 [it works] (http://melpon.org/wandbox/permlink/L8ZGpMveSiBnNj7a)처럼 보입니다. –
그러면 내 버전의 libstdC++ 버그 일 수 있습니다. 사용하는 버전이 궁금합니다. –