C++相談室 part63

このエントリーをはてなブックマークに追加
943デフォルトの名無しさん
きっとこういうことだと予想。無駄にTR1使ってみた。あと、おそらくremove_cvも使ったほうがよい。
#include <iostream>
#include <iterator>
#include <type_traits>
#include <array>
#include <boost/utility/enable_if.hpp>
template<typename Iter>
struct is_int_iterator : std::tr1::is_same<typename std::iterator_traits<Iter>::value_type, int> {};
template<typename Iter>
void f(Iter first, Iter last, typename boost::enable_if<typename is_int_iterator<Iter> >::type* = 0)
{
std::cout << "int" << std::endl;
}
template<typename Iter>
void f(Iter first, Iter last, typename boost::disable_if<typename is_int_iterator<Iter> >::type* = 0)
{
std::cout << "not int" << std::endl;
}
int main()
{
int i[5];
std::tr1::array<long, 3> l;
f(&i[0], &i[5]);
f(l.begin(), l.end());
}