diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-11-24 20:33:19 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-11-24 20:35:17 (GMT) |
commit | 332d60c56dfaa11fdd135088279d15cd5983b3d4 (patch) | |
tree | dd77717a4e1732da929d5ff8a0471fa3f005e201 /3rdParty/Boost/src/boost/foreach.hpp | |
parent | 90c44a10fec26d2a0935b2d62e82b6a5be028373 (diff) | |
download | swift-contrib-332d60c56dfaa11fdd135088279d15cd5983b3d4.zip swift-contrib-332d60c56dfaa11fdd135088279d15cd5983b3d4.tar.bz2 |
Upgraded Boost to 1.45.0.
Diffstat (limited to '3rdParty/Boost/src/boost/foreach.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/foreach.hpp | 87 |
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 |