以下代码:
#include <iostream>
#include <iomanip>
#include <string>
#include <utility>
using namespace std;
struct Foo
{
std::string s;
int i;
};
int main()
{
cout << boolalpha << is_nothrow_constructible<Foo>::value << endl;
cout << is_nothrow_constructible<pair<string, int>>::value << endl;
cout << is_nothrow_move_constructible<Foo>::value << endl;
cout << is_nothrow_move_constructible<pair<string, int>>::value << endl;
return 0;
}
编译时产生以下输出g++ -std=c++11
:
true
false
true
true
为什么std::pair<string, int>
nothrow 不可构造,whileFoo
是,为什么它是 nothrow move 可构造的?