これは私が混乱する小さな問題です。説明の仕方がわからないので、以下のコードを参照してください。
struct B {
B() {}
B(B&) {
std::cout << "not trivial\n";
}
};
int main() {
B b1;
B b2(b1);
std::cout << std::is_trivially_constructible<B, B&>::value << '\n';
return 0;
}
出力は次のとおりです。
not trivial
1
私はVS11を使用しています。
編集:
http://en.cppreference.com/w/cpp/types/is_constructibleの例をテストしました。出力の一部が正しくありません。
#include <iostream>
#include <type_traits>
class Foo {
int v1;
double v2;
public:
Foo(int n) : v1(n), v2() {}
Foo(int n, double f) : v1(n), v2(f) {}
};
int main() {
std::cout << "Foo is ...\n" << std::boolalpha
<< "\tTrivially-constructible from const Foo&? "
<< std::is_trivially_constructible<Foo, const Foo&>::value << '\n'
<< "\tTrivially-constructible from int? "
<< std::is_trivially_constructible<Foo, int>::value << '\n'
<< "\tConstructible from int? "
<< std::is_constructible<Foo, int>::value << '\n'
}
出力は次のとおりです。
Foo is ...
Trivially-constructible from const Foo&? true
Trivially-constructible from int? true//Trivially-constructible from int? false
Constructible from int? true