変換コンストラクタとキャストのシンタックスが同じなのは罠だよなあ.
struct my_int { my_int(double a) : v(static_cast<int>(a)) {}; int v; }; void f(my_int a) { printf("%d\n",a.v); }; void f(int a) { printf("%d\n",a); }; void g() { f(my_int(12.3)); // これと f(int(12.3)); // これね };
セマンティクスの観点からはうまいことやったつもりなんだろうけど.