1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/stdapis/boost/tuple/tuple.hpp Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -0,0 +1,90 @@
1.4 +// tuple.hpp - Boost Tuple Library --------------------------------------
1.5 +
1.6 +// Copyright (C) 1999, 2000 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
1.7 +//
1.8 +// Distributed under the Boost Software License, Version 1.0. (See
1.9 +// accompanying file LICENSE_1_0.txt or copy at
1.10 +// http://www.boost.org/LICENSE_1_0.txt)
1.11 +
1.12 +// For more information, see http://www.boost.org
1.13 +
1.14 +// -----------------------------------------------------------------
1.15 +
1.16 +#ifndef BOOST_TUPLE_HPP
1.17 +#define BOOST_TUPLE_HPP
1.18 +
1.19 +#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
1.20 +// Work around a compiler bug.
1.21 +// boost::python::tuple has to be seen by the compiler before the
1.22 +// boost::tuple class template.
1.23 +namespace boost { namespace python { class tuple; }}
1.24 +#endif
1.25 +
1.26 +#include "boost/config.hpp"
1.27 +#include "boost/static_assert.hpp"
1.28 +
1.29 +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.30 +// The MSVC version
1.31 +#include "boost/tuple/detail/tuple_basic_no_partial_spec.hpp"
1.32 +
1.33 +#else
1.34 +// other compilers
1.35 +#include "boost/ref.hpp"
1.36 +#include "boost/tuple/detail/tuple_basic.hpp"
1.37 +
1.38 +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.39 +
1.40 +namespace boost {
1.41 +
1.42 +using tuples::tuple;
1.43 +using tuples::make_tuple;
1.44 +using tuples::tie;
1.45 +#if !defined(BOOST_NO_USING_TEMPLATE)
1.46 +using tuples::get;
1.47 +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
1.48 +//
1.49 +// The "using tuples::get" statement causes the
1.50 +// Borland compiler to ICE, use forwarding
1.51 +// functions instead:
1.52 +//
1.53 +template<int N, class HT, class TT>
1.54 +inline typename tuples::access_traits<
1.55 + typename tuples::element<N, tuples::cons<HT, TT> >::type
1.56 + >::non_const_type
1.57 +get(tuples::cons<HT, TT>& c) {
1.58 + return tuples::get<N,HT,TT>(c);
1.59 +}
1.60 +// get function for const cons-lists, returns a const reference to
1.61 +// the element. If the element is a reference, returns the reference
1.62 +// as such (that is, can return a non-const reference)
1.63 +template<int N, class HT, class TT>
1.64 +inline typename tuples::access_traits<
1.65 + typename tuples::element<N, tuples::cons<HT, TT> >::type
1.66 + >::const_type
1.67 +get(const tuples::cons<HT, TT>& c) {
1.68 + return tuples::get<N,HT,TT>(c);
1.69 +}
1.70 +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
1.71 +//
1.72 +// MSVC, using declarations don't mix with templates well,
1.73 +// so use forwarding functions instead:
1.74 +//
1.75 +template<int N, typename Head, typename Tail>
1.76 +typename tuples::detail::element_ref<N, tuples::cons<Head, Tail> >::RET
1.77 +get(tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
1.78 +{
1.79 + return tuples::detail::get_class<N>::get(t);
1.80 +}
1.81 +
1.82 +template<int N, typename Head, typename Tail>
1.83 +typename tuples::detail::element_const_ref<N, tuples::cons<Head, Tail> >::RET
1.84 +get(const tuples::cons<Head, Tail>& t, tuples::detail::workaround_holder<N>* = 0)
1.85 +{
1.86 + return tuples::detail::get_class<N>::get(t);
1.87 +}
1.88 +#endif // BOOST_NO_USING_TEMPLATE
1.89 +
1.90 +} // end namespace boost
1.91 +
1.92 +
1.93 +#endif // BOOST_TUPLE_HPP