conform to TR1 to the letter

[SVN r48244]
This commit is contained in:
Joel de Guzman
2008-08-20 08:20:40 +00:00
parent e165418461
commit 7c74332487
2 changed files with 47 additions and 13 deletions

View File

@ -1,19 +1,19 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman Copyright (c) 2001-2006 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING #ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_TUPLE_FORWARD_CTOR_10032005_0815) #if !defined(FUSION_TUPLE_EXPAND_10032005_0815)
#define FUSION_TUPLE_FORWARD_CTOR_10032005_0815 #define FUSION_TUPLE_EXPAND_10032005_0815
#include <boost/preprocessor/iterate.hpp> #include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp> #include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp> #include <boost/preprocessor/repetition/enum_binary_params.hpp>
#define BOOST_PP_FILENAME_1 \ #define BOOST_PP_FILENAME_1 \
<boost/fusion/tuple/detail/tuple_forward_ctor.hpp> <boost/fusion/tuple/detail/tuple_expand.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
#include BOOST_PP_ITERATE() #include BOOST_PP_ITERATE()
@ -34,6 +34,22 @@
N, typename detail::call_param<T, >::type _)) N, typename detail::call_param<T, >::type _))
: base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
tuple(BOOST_PP_ENUM_BINARY_PARAMS(
N, typename detail::call_param<U, >::type _))
: base_type(BOOST_PP_ENUM_PARAMS(N, _)) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
tuple(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
: base_type(rhs) {}
template <BOOST_PP_ENUM_PARAMS(N, typename U)>
tuple& operator=(tuple<BOOST_PP_ENUM_PARAMS(N, U)> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
#undef N #undef N
#endif // defined(BOOST_PP_IS_ITERATING) #endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -1,7 +1,7 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2005 Joel de Guzman Copyright (c) 2005 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying 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) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/ ==============================================================================*/
#if !defined(FUSION_TUPLE_10032005_0810) #if !defined(FUSION_TUPLE_10032005_0810)
@ -16,6 +16,7 @@
#include <boost/fusion/sequence/io.hpp> #include <boost/fusion/sequence/io.hpp>
#include <boost/utility/enable_if.hpp> #include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_const.hpp> #include <boost/type_traits/is_const.hpp>
#include <utility>
namespace boost { namespace fusion namespace boost { namespace fusion
{ {
@ -23,17 +24,20 @@ namespace boost { namespace fusion
struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> struct tuple : vector<BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
{ {
typedef vector< typedef vector<
BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)> BOOST_PP_ENUM_PARAMS(FUSION_MAX_VECTOR_SIZE, T)>
base_type; base_type;
tuple() tuple()
: base_type() {} : base_type() {}
template <typename Sequence> tuple(tuple const& rhs)
tuple(Sequence const& rhs)
: base_type(rhs) {} : base_type(rhs) {}
#include <boost/fusion/tuple/detail/tuple_forward_ctor.hpp> template <typename U1, typename U2>
tuple(std::pair<U1, U2> const& rhs)
: base_type(rhs) {}
#include <boost/fusion/tuple/detail/tuple_expand.hpp>
template <typename T> template <typename T>
tuple& tuple&
@ -42,16 +46,30 @@ namespace boost { namespace fusion
base_type::operator=(rhs); base_type::operator=(rhs);
return *this; return *this;
} }
tuple&
operator=(tuple const& rhs)
{
base_type::operator=(rhs);
return *this;
}
template <typename U1, typename U2>
operator=(std::pair<U1, U2> const& rhs)
{
base_type::operator=(rhs);
return *this;
}
}; };
template <typename Tuple> template <typename Tuple>
struct tuple_size : result_of::size<Tuple> {}; struct tuple_size : result_of::size<Tuple> {};
template <int N, typename Tuple> template <int N, typename Tuple>
struct tuple_element : result_of::value_at_c<Tuple, N> {}; struct tuple_element : result_of::value_at_c<Tuple, N> {};
template <int N, typename Tuple> template <int N, typename Tuple>
inline typename inline typename
lazy_disable_if< lazy_disable_if<
is_const<Tuple> is_const<Tuple>
, result_of::at_c<Tuple, N> , result_of::at_c<Tuple, N>