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++错误。我想知道使用什么版本 –