| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | // 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_SIZE_HPP#define BOOST_RANGE_SIZE_HPP#if defined(_MSC_VER)# pragma once#endif#include <boost/range/config.hpp>#include <boost/range/begin.hpp>#include <boost/range/end.hpp>#include <boost/range/size_type.hpp>#include <boost/range/detail/has_member_size.hpp>#include <boost/assert.hpp>#include <boost/cstdint.hpp>#include <boost/utility.hpp>namespace boost{    namespace range_detail    {        template<class SinglePassRange>        inline typename ::boost::enable_if<            has_member_size<SinglePassRange>,            typename range_size<const SinglePassRange>::type        >::type        range_calculate_size(const SinglePassRange& rng)        {            return rng.size();        }        template<class SinglePassRange>        inline typename disable_if<            has_member_size<SinglePassRange>,            typename range_size<const SinglePassRange>::type        >::type        range_calculate_size(const SinglePassRange& rng)        {            return std::distance(boost::begin(rng), boost::end(rng));        }    }    template<class SinglePassRange>    inline typename range_size<const SinglePassRange>::type    size(const SinglePassRange& rng)    {// Very strange things happen on some compilers that have the range concept// asserts disabled. This preprocessor condition is clearly redundant on a// working compiler but is vital for at least some compilers such as clang 4.2// but only on the Mac!#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT == 1        BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept<SinglePassRange>));#endif#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \    !BOOST_WORKAROUND(__GNUC__, < 3) \    /**/        using namespace range_detail;#endif        return range_calculate_size(rng);    }} // namespace 'boost'#endif
 |