| Index: third_party/boost/boost/ref.hpp
|
| diff --git a/third_party/boost/boost/ref.hpp b/third_party/boost/boost/ref.hpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..330ca6567f65d29b8e9fd892f33398268f026636
|
| --- /dev/null
|
| +++ b/third_party/boost/boost/ref.hpp
|
| @@ -0,0 +1,178 @@
|
| +#ifndef BOOST_REF_HPP_INCLUDED
|
| +#define BOOST_REF_HPP_INCLUDED
|
| +
|
| +// MS compatible compilers support #pragma once
|
| +
|
| +#if defined(_MSC_VER) && (_MSC_VER >= 1020)
|
| +# pragma once
|
| +#endif
|
| +
|
| +#include <boost/config.hpp>
|
| +#include <boost/utility/addressof.hpp>
|
| +#include <boost/mpl/bool.hpp>
|
| +#include <boost/detail/workaround.hpp>
|
| +
|
| +//
|
| +// ref.hpp - ref/cref, useful helper functions
|
| +//
|
| +// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
| +// Copyright (C) 2001, 2002 Peter Dimov
|
| +// Copyright (C) 2002 David Abrahams
|
| +//
|
| +// Distributed under 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)
|
| +//
|
| +// See http://www.boost.org/libs/bind/ref.html for documentation.
|
| +//
|
| +
|
| +namespace boost
|
| +{
|
| +
|
| +template<class T> class reference_wrapper
|
| +{
|
| +public:
|
| + typedef T type;
|
| +
|
| +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
|
| +
|
| + explicit reference_wrapper(T& t): t_(&t) {}
|
| +
|
| +#else
|
| +
|
| + explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
|
| +
|
| +#endif
|
| +
|
| + operator T& () const { return *t_; }
|
| +
|
| + T& get() const { return *t_; }
|
| +
|
| + T* get_pointer() const { return t_; }
|
| +
|
| +private:
|
| +
|
| + T* t_;
|
| +};
|
| +
|
| +# if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
|
| +# define BOOST_REF_CONST
|
| +# else
|
| +# define BOOST_REF_CONST const
|
| +# endif
|
| +
|
| +template<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t)
|
| +{
|
| + return reference_wrapper<T>(t);
|
| +}
|
| +
|
| +template<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)
|
| +{
|
| + return reference_wrapper<T const>(t);
|
| +}
|
| +
|
| +# undef BOOST_REF_CONST
|
| +
|
| +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
| +
|
| +template<typename T>
|
| +class is_reference_wrapper
|
| + : public mpl::false_
|
| +{
|
| +};
|
| +
|
| +template<typename T>
|
| +class unwrap_reference
|
| +{
|
| + public:
|
| + typedef T type;
|
| +};
|
| +
|
| +# define AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(X) \
|
| +template<typename T> \
|
| +class is_reference_wrapper< X > \
|
| + : public mpl::true_ \
|
| +{ \
|
| +}; \
|
| +\
|
| +template<typename T> \
|
| +class unwrap_reference< X > \
|
| +{ \
|
| + public: \
|
| + typedef T type; \
|
| +}; \
|
| +/**/
|
| +
|
| +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T>)
|
| +#if !defined(BOOST_NO_CV_SPECIALIZATIONS)
|
| +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const)
|
| +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> volatile)
|
| +AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF(reference_wrapper<T> const volatile)
|
| +#endif
|
| +
|
| +# undef AUX_REFERENCE_WRAPPER_METAFUNCTIONS_DEF
|
| +
|
| +# else // no partial specialization
|
| +
|
| +} // namespace boost
|
| +
|
| +#include <boost/type.hpp>
|
| +
|
| +namespace boost
|
| +{
|
| +
|
| +namespace detail
|
| +{
|
| + typedef char (&yes_reference_wrapper_t)[1];
|
| + typedef char (&no_reference_wrapper_t)[2];
|
| +
|
| + no_reference_wrapper_t is_reference_wrapper_test(...);
|
| +
|
| + template<typename T>
|
| + yes_reference_wrapper_t is_reference_wrapper_test(type< reference_wrapper<T> >);
|
| +
|
| + template<bool wrapped>
|
| + struct reference_unwrapper
|
| + {
|
| + template <class T>
|
| + struct apply
|
| + {
|
| + typedef T type;
|
| + };
|
| + };
|
| +
|
| + template<>
|
| + struct reference_unwrapper<true>
|
| + {
|
| + template <class T>
|
| + struct apply
|
| + {
|
| + typedef typename T::type type;
|
| + };
|
| + };
|
| +}
|
| +
|
| +template<typename T>
|
| +class is_reference_wrapper
|
| +{
|
| + public:
|
| + BOOST_STATIC_CONSTANT(
|
| + bool, value = (
|
| + sizeof(detail::is_reference_wrapper_test(type<T>()))
|
| + == sizeof(detail::yes_reference_wrapper_t)));
|
| +
|
| + typedef ::boost::mpl::bool_<value> type;
|
| +};
|
| +
|
| +template <typename T>
|
| +class unwrap_reference
|
| + : public detail::reference_unwrapper<
|
| + is_reference_wrapper<T>::value
|
| + >::template apply<T>
|
| +{};
|
| +
|
| +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
| +
|
| +} // namespace boost
|
| +
|
| +#endif // #ifndef BOOST_REF_HPP_INCLUDED
|
|
|