summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/src/boost/foreach.hpp')
-rw-r--r--3rdParty/Boost/src/boost/foreach.hpp87
1 files changed, 46 insertions, 41 deletions
diff --git a/3rdParty/Boost/src/boost/foreach.hpp b/3rdParty/Boost/src/boost/foreach.hpp
index 9a5b931..db5b203 100644
--- a/3rdParty/Boost/src/boost/foreach.hpp
+++ b/3rdParty/Boost/src/boost/foreach.hpp
@@ -31,8 +31,9 @@
// Some compilers let us detect even const-qualified rvalues at compile-time
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) && !defined(_PREFAST_) \
- || (BOOST_WORKAROUND(__GNUC__, >= 4) && !defined(BOOST_INTEL)) \
- || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL))
+ || (BOOST_WORKAROUND(__GNUC__, >= 4) && !defined(BOOST_INTEL) && !defined(BOOST_CLANG)) \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL) && \
+ !defined(BOOST_CLANG))
# define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION
#else
// Some compilers allow temporaries to be bound to non-const references.
@@ -41,7 +42,7 @@
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| BOOST_WORKAROUND(__BORLANDC__, < 0x593) \
|| (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
- || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \
|| BOOST_WORKAROUND(__DECCXX_VER, <= 60590042)
# define BOOST_FOREACH_NO_RVALUE_DETECTION
# endif
@@ -56,6 +57,7 @@
|| (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
|| BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, >= 0x5100) \
|| BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590))
# define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION
# else
@@ -80,6 +82,7 @@
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/utility/addressof.hpp>
+#include <boost/foreach_fwd.hpp>
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
# include <new>
@@ -88,12 +91,6 @@
# include <boost/type_traits/remove_const.hpp>
#endif
-// This must be at global scope, hence the uglified name
-enum boost_foreach_argument_dependent_lookup_hack
-{
- boost_foreach_argument_dependent_lookup_hack_value
-};
-
namespace boost
{
@@ -117,11 +114,6 @@ namespace foreach
}
///////////////////////////////////////////////////////////////////////////////
- // boost::foreach::tag
- //
- typedef boost_foreach_argument_dependent_lookup_hack tag;
-
- ///////////////////////////////////////////////////////////////////////////////
// boost::foreach::is_lightweight_proxy
// Specialize this for user-defined collection types if they are inexpensive to copy.
// This tells BOOST_FOREACH it can avoid the rvalue/lvalue detection stuff.
@@ -254,7 +246,7 @@ struct auto_any_base
template<typename T>
struct auto_any : auto_any_base
{
- auto_any(T const &t)
+ explicit auto_any(T const &t)
: item(t)
{
}
@@ -614,7 +606,7 @@ should_copy_impl(boost::mpl::false_ *, boost::mpl::false_ *, bool *is_rvalue)
template<typename T>
inline auto_any<T> contain(T const &t, boost::mpl::true_ *) // rvalue
{
- return t;
+ return auto_any<T>(t);
}
template<typename T>
@@ -622,18 +614,18 @@ inline auto_any<T *> contain(T &t, boost::mpl::false_ *) // lvalue
{
// Cannot seem to get sunpro to handle addressof() with array types.
#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x570))
- return &t;
+ return auto_any<T *>(&t);
#else
- return boost::addressof(t);
+ return auto_any<T *>(boost::addressof(t));
#endif
}
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
template<typename T>
-auto_any<simple_variant<T> >
+inline auto_any<simple_variant<T> >
contain(T const &t, bool *rvalue)
{
- return *rvalue ? simple_variant<T>(t) : simple_variant<T>(&t);
+ return auto_any<simple_variant<T> >(*rvalue ? simple_variant<T>(t) : simple_variant<T>(&t));
}
#endif
@@ -644,7 +636,8 @@ template<typename T, typename C>
inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
begin(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
{
- return boost::begin(auto_any_cast<T, C>(col));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+ boost::begin(auto_any_cast<T, C>(col)));
}
template<typename T, typename C>
@@ -653,15 +646,17 @@ begin(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
{
typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
- return iterator(boost::begin(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+ iterator(boost::begin(derefof(auto_any_cast<type *, boost::mpl::false_>(col)))));
}
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
template<typename T>
-auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
begin(auto_any_t col, type2type<T, const_> *, bool *)
{
- return boost::begin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>(
+ boost::begin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get()));
}
#endif
@@ -670,7 +665,7 @@ template<typename T, typename C>
inline auto_any<T *>
begin(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
{
- return auto_any_cast<T *, boost::mpl::false_>(col);
+ return auto_any<T *>(auto_any_cast<T *, boost::mpl::false_>(col));
}
#endif
@@ -681,7 +676,8 @@ template<typename T, typename C>
inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>
end(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
{
- return boost::end(auto_any_cast<T, C>(col));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+ boost::end(auto_any_cast<T, C>(col)));
}
template<typename T, typename C>
@@ -690,24 +686,26 @@ end(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
{
typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
typedef BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type iterator;
- return iterator(boost::end(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, C>::type>(
+ iterator(boost::end(derefof(auto_any_cast<type *, boost::mpl::false_>(col)))));
}
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
template<typename T>
-auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>
end(auto_any_t col, type2type<T, const_> *, bool *)
{
- return boost::end(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_iterator<T, const_>::type>(
+ boost::end(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get()));
}
#endif
#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
template<typename T, typename C>
inline auto_any<int>
-end(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
+end(auto_any_t, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
{
- return 0; // not used
+ return auto_any<int>(0); // not used
}
#endif
@@ -757,7 +755,8 @@ template<typename T, typename C>
inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
rbegin(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
{
- return boost::rbegin(auto_any_cast<T, C>(col));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+ boost::rbegin(auto_any_cast<T, C>(col)));
}
template<typename T, typename C>
@@ -766,15 +765,17 @@ rbegin(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
{
typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
- return iterator(boost::rbegin(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+ iterator(boost::rbegin(derefof(auto_any_cast<type *, boost::mpl::false_>(col)))));
}
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
template<typename T>
-auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
rbegin(auto_any_t col, type2type<T, const_> *, bool *)
{
- return boost::rbegin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>(
+ boost::rbegin(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get()));
}
#endif
@@ -786,7 +787,7 @@ rbegin(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-termina
T *p = auto_any_cast<T *, boost::mpl::false_>(col);
while(0 != *p)
++p;
- return reverse_iterator<T *>(p);
+ return auto_any<reverse_iterator<T *> >(reverse_iterator<T *>(p));
}
#endif
@@ -797,7 +798,8 @@ template<typename T, typename C>
inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>
rend(auto_any_t col, type2type<T, C> *, boost::mpl::true_ *) // rvalue
{
- return boost::rend(auto_any_cast<T, C>(col));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+ boost::rend(auto_any_cast<T, C>(col)));
}
template<typename T, typename C>
@@ -806,15 +808,17 @@ rend(auto_any_t col, type2type<T, C> *, boost::mpl::false_ *) // lvalue
{
typedef BOOST_DEDUCED_TYPENAME type2type<T, C>::type type;
typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type iterator;
- return iterator(boost::rend(derefof(auto_any_cast<type *, boost::mpl::false_>(col))));
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, C>::type>(
+ iterator(boost::rend(derefof(auto_any_cast<type *, boost::mpl::false_>(col)))));
}
#ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION
template<typename T>
-auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
+inline auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>
rend(auto_any_t col, type2type<T, const_> *, bool *)
{
- return boost::rend(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get());
+ return auto_any<BOOST_DEDUCED_TYPENAME foreach_reverse_iterator<T, const_>::type>(
+ boost::rend(*auto_any_cast<simple_variant<T>, boost::mpl::false_>(col).get()));
}
#endif
@@ -823,7 +827,8 @@ template<typename T, typename C>
inline auto_any<reverse_iterator<T *> >
rend(auto_any_t col, type2type<T *, C> *, boost::mpl::true_ *) // null-terminated C-style strings
{
- return reverse_iterator<T *>(auto_any_cast<T *, boost::mpl::false_>(col));
+ return auto_any<reverse_iterator<T *> >(
+ reverse_iterator<T *>(auto_any_cast<T *, boost::mpl::false_>(col)));
}
#endif