| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | // Boost.Range library////  Copyright Thorsten Ottosen 2003-2004. Use, modification and//  distribution is subject to the Boost Software License, Version//  1.0. (See accompanying file LICENSE_1_0.txt or copy at//  http://www.boost.org/LICENSE_1_0.txt)//// For more information, see http://www.boost.org/libs/range///#ifndef BOOST_RANGE_END_HPP#define BOOST_RANGE_END_HPP#if defined(_MSC_VER)# pragma once#endif#include <boost/range/config.hpp>#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING#include <boost/range/detail/end.hpp>#else#include <boost/range/detail/implementation_help.hpp>#include <boost/range/iterator.hpp>#include <boost/range/const_iterator.hpp>#include <boost/config.hpp>#include <boost/config/workaround.hpp>namespace boost{#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))namespace range_detail{#endif        //////////////////////////////////////////////////////////////////////        // primary template        //////////////////////////////////////////////////////////////////////        template< typename C >        BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator<C>::type        range_end( C& c )        {            //            // If you get a compile-error here, it is most likely because            // you have not implemented range_begin() properly in            // the namespace of C            //            return c.end();        }        //////////////////////////////////////////////////////////////////////        // pair        //////////////////////////////////////////////////////////////////////        template< typename Iterator >        BOOST_CONSTEXPR inline Iterator range_end( const std::pair<Iterator,Iterator>& p )        {            return p.second;        }        template< typename Iterator >        BOOST_CONSTEXPR inline Iterator range_end( std::pair<Iterator,Iterator>& p )        {            return p.second;        }        //////////////////////////////////////////////////////////////////////        // array        //////////////////////////////////////////////////////////////////////        template< typename T, std::size_t sz >        BOOST_CONSTEXPR inline const T* range_end( const T (&a)[sz] ) BOOST_NOEXCEPT        {            return range_detail::array_end<T,sz>( a );        }        template< typename T, std::size_t sz >        BOOST_CONSTEXPR inline T* range_end( T (&a)[sz] ) BOOST_NOEXCEPT        {            return range_detail::array_end<T,sz>( a );        }#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))} // namespace 'range_detail'#endifnamespace range_adl_barrier{template< class T >#if !BOOST_WORKAROUND(BOOST_GCC, < 40700)BOOST_CONSTEXPR#endifinline BOOST_DEDUCED_TYPENAME range_iterator<T>::type end( T& r ){#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))    using namespace range_detail;#endif    return range_end( r );}template< class T >#if !BOOST_WORKAROUND(BOOST_GCC, < 40700)BOOST_CONSTEXPR#endifinline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type end( const T& r ){#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))    using namespace range_detail;#endif    return range_end( r );}    } // namespace range_adl_barrier} // namespace 'boost'#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERINGnamespace boost{    namespace range_adl_barrier    {        template< class T >        BOOST_CONSTEXPR inline BOOST_DEDUCED_TYPENAME range_iterator<const T>::type        const_end( const T& r )        {            return boost::range_adl_barrier::end( r );        }    } // namespace range_adl_barrier    using namespace range_adl_barrier;} // namespace boost#endif
 |