boost::transform_iterator の異なる instantiation 間の変換可能性の制御は SFINAE に基づく実装なんですぐわ,
BOOST_MPL_ASSERT(( boost::is_convertible< boost::transform_iterator< int (*)( int ), std::vector< int >::iterator > , boost::transform_iterator< int (*)( int ), std::vector< int >::const_iterator > > ));
上のテスト MSVC7.1 だと false negative だにゃー. MSVC7.1 でもまだ SFINAE 周りに難があることを実感. MSVC8.0 あるいは GCC 3.4.x, 4.0.x, 4.1.x あたりはちゃんと通りまする.