uniform initialization と default copy constractor

次のコード、てっきり default copy constractor が呼ばれると思っていたんですが、uniform initialization が優先されるんですね。
ちょっとハマった。

[ソース]

struct X{
    int value;
};

int
main(){
    X x{10};

    // error: cannot convert 'X' to 'int' in initialization
//  auto x2 = X{ x };
//  X x2{ x };

    // ok
//  auto x2 = X( x );
//  X x2( x );
//  X x2 = x;
    
    return 0;
}

[コンパイラ]

  • g++ (GCC) 4.8.0 20121104 (experimental)
  • clang++ (LLVM) 3.2 20120514(trunk)