summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/range/mutable_iterator.hpp')
-rw-r--r--3rdParty/Boost/src/boost/range/mutable_iterator.hpp70
1 files changed, 41 insertions, 29 deletions
diff --git a/3rdParty/Boost/src/boost/range/mutable_iterator.hpp b/3rdParty/Boost/src/boost/range/mutable_iterator.hpp
index 7beca66..b924666 100644
--- a/3rdParty/Boost/src/boost/range/mutable_iterator.hpp
+++ b/3rdParty/Boost/src/boost/range/mutable_iterator.hpp
@@ -11,57 +11,69 @@
#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
#define BOOST_RANGE_MUTABLE_ITERATOR_HPP
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#if defined(_MSC_VER)
# pragma once
#endif
#include <boost/range/config.hpp>
-#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-#include <boost/range/detail/iterator.hpp>
-#else
-
+#include <boost/range/range_fwd.hpp>
#include <boost/range/detail/extract_optional_type.hpp>
+#include <boost/type_traits/remove_reference.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <cstddef>
#include <utility>
namespace boost
{
+
//////////////////////////////////////////////////////////////////////////
// default
//////////////////////////////////////////////////////////////////////////
- namespace range_detail {
- BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )
- }
+ namespace range_detail
+ {
- template< typename C >
- struct range_mutable_iterator : range_detail::extract_iterator<C>
- {};
-
- //////////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////////
+BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( iterator )
- template< typename Iterator >
- struct range_mutable_iterator< std::pair<Iterator,Iterator> >
- {
- typedef Iterator type;
- };
+template< typename C >
+struct range_mutable_iterator
+ : range_detail::extract_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<C>::type>
+{};
- //////////////////////////////////////////////////////////////////////////
- // array
- //////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+// pair
+//////////////////////////////////////////////////////////////////////////
- template< typename T, std::size_t sz >
- struct range_mutable_iterator< T[sz] >
- {
- typedef T* type;
- };
+template< typename Iterator >
+struct range_mutable_iterator< std::pair<Iterator,Iterator> >
+{
+ typedef Iterator type;
+};
+
+//////////////////////////////////////////////////////////////////////////
+// array
+//////////////////////////////////////////////////////////////////////////
+
+template< typename T, std::size_t sz >
+struct range_mutable_iterator< T[sz] >
+{
+ typedef T* type;
+};
+
+ } // namespace range_detail
+
+template<typename C, typename Enabler=void>
+struct range_mutable_iterator
+ : range_detail::range_mutable_iterator<
+ BOOST_DEDUCED_TYPENAME remove_reference<C>::type
+ >
+{
+};
} // namespace boost
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+#include <boost/range/detail/msvc_has_iterator_workaround.hpp>
#endif