4
我玩弄type_traits
,我發現了這個奇怪的std::string
屬性:std :: string nothrow 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聲稱move assignment operator和comparison operators標記noexcept
。
我做錯了什麼?這是一個錯誤?
也許只是一個不好的實現。在GCC 6中看起來像[它有效](http://melpon.org/wandbox/permlink/L8ZGpMveSiBnNj7a)。 –
可能是我版本中的libstdC++錯誤。我想知道使用什麼版本 –