私は持っている:
class C
{
C(long){...};
C(double){...};
:
}
不運にも、
C c{5}; // error! ambiguous overload
(これはかなり恐ろしいことではありませんか? 整数型は、より高い精度の整数引数を取るコンストラクターを確実に優先する必要があります。)
整数引数と浮動小数点引数をそれぞれのコンストラクターに正しく転送するにはどうすればよいですか?
編集:質問を単純化しすぎたのかもしれません。もともとはこの問い合わせから来ています。Float Long String などの Python プリミティブをラップしています。初期化が正しいプリミティブに転送されることが重要です。同時に、これは汎用ラッパーであることを意図しているため、消費者が内部の落とし穴を避けるために型キャストについて心配する必要はありません。
Mike Seymour が指摘するように、SFINAE はこれを処理するテクニックを提供します。
以下のソリューションについて、FreeNode C++ チャネルの doug64k に大いに感謝します。
http://ideone.com/QLUpu2 http://ideone.com/TCigR3 http://ideone.com/oDOSLH
明日トレイルを拾うときに、これらを答えに変えようとします。