以下は、事前定義された数の型のいずれかに変換できるテンプレート引数で機能することを期待する、欠陥のある (そして簡略化された) テンプレート関数です。
たまたま2種類ですが、寒いのはもっと多いです。
void do_something_type_specific( const int &unused ) { std::cout << 'i'; }
void do_something_type_specific( const std::string &unused ) { std::cout << 's'; }
template< typename Iterator >
void perform_work_on_a_range( Iterator begin, Iterator end )
{
do_something_type_specific( *begin );
// Perhaps more code...
}
これにより、私の環境で望ましい結果が得られます。*Iterator
テンプレート インスタンスは、選択肢の 1 つに変換可能な型を生成する場合に正常にコンパイルされます。
ただし、このコードは不必要に変換の実行を要求し、使用されていないにもかかわらずunused
、まだ UB when begin == end
.
これらの問題なしに、この動作を C++03 でどのように実装できますか?