変換コンストラクタとキャストのシンタックスが同じなのは罠だよなあ.
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));
};
セマンティクスの観点からはうまいことやったつもりなんだろうけど.
追記
そうじゃなくて引数をひとつ取るコンストラクタが変換コンストラクタになってるのが罠か.