Fix misinterpretation of decay

This commit is contained in:
Marc Glisse 2011-05-13 18:37:13 +00:00
parent ea598e5a45
commit d64e8a9371
1 changed files with 7 additions and 2 deletions

View File

@ -41,13 +41,18 @@ template <class T,class U> struct is_iterator_type_<T,U,true> :
//boost::is_base_of<U,typename std::iterator_traits<T>::iterator_category>
boost::is_convertible<typename std::iterator_traits<T>::iterator_category,U>
{};
template <class T> struct decay_array { typedef T type; };
template <class T> struct decay_array<T[]> { typedef T* type; };
template <class T,int d> struct decay_array<T[d]> { typedef T* type; };
}
// NOTE: we don't want the real std::decay or functions are included
template <class T> struct is_iterator :
internal::is_iterator_<typename boost::decay<T>::type> {};
internal::is_iterator_<typename internal::decay_array<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type>::type> {};
template <class T,class Tag> struct is_iterator_type :
internal::is_iterator_type_<typename boost::decay<T>::type,Tag> {};
internal::is_iterator_type_<typename internal::decay_array<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type>::type,Tag> {};
}