我正在玩type_traits
,我发现std::string
这个奇怪的属性:
$ 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
。
我做错了吗?这是一个错误吗?
答案 0 :(得分:3)