1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include <iostream>
#include <type_traits>
#include <string>
using namespace std;
class Foreign
{
public:
Foreign() = default;
Foreign(string const &) noexcept
{}
Foreign(Foreign const &other) noexcept
{
throw 1;
}
};
class String
{
public:
String() = default;
String(String &&tmp)
{}
};
template <typename Type>
class MyClass
{
Type d_f;
public:
MyClass() = default;
MyClass(MyClass &&tmp)
:
d_f(move(tmp.d_f))
{}
};
int main()
try
{
cout << "TRAIT: " << is_nothrow_copy_constructible<Foreign>::value << '\n';
MyClass<String> s1{ move(MyClass<String>{} ) };
MyClass<Foreign> s2{ move(MyClass<Foreign>{} ) };
}
catch (...)
{
cout << "Exception\n";
}
|