namespace boost {
  namespace sort {
    namespace spreadsort {
      template<typename RandomAccessIter> 
        boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type 
        spreadsort(RandomAccessIter, RandomAccessIter);
      template<typename RandomAccessIter> 
        boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer &&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type 
        spreadsort(RandomAccessIter, RandomAccessIter);
      template<typename RandomAccessIter> 
        boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::string >::value, void >::type 
        spreadsort(RandomAccessIter, RandomAccessIter);
      template<typename RandomAccessIter> 
        boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::wstring >::value &&sizeof(wchar_t)==2, void >::type 
        spreadsort(RandomAccessIter, RandomAccessIter);
    }
  }
}