下面是一个有缺陷的(和简化的)模板函数,它期望在模板 arg 上工作,该模板 arg 可以转换为预定义数量的类型之一。
它恰好是 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
是生成的类型可转换为恰好其中一个选项。
但是,此代码不必要地要求执行转换,尽管unused
未使用,但仍然存在 UB when begin == end
.
如果没有这些问题,如何在 C++03 中实现这种行为?