これは私が混乱する小さな問題です。説明の仕方がわからないので、以下のコードを参照してください。
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