1.1 --- a/epoc32/include/stdapis/boost/detail/call_traits.hpp Tue Mar 16 16:12:26 2010 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,164 +0,0 @@
1.4 -// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
1.5 -// Use, modification and distribution are subject to the Boost Software License,
1.6 -// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
1.7 -// http://www.boost.org/LICENSE_1_0.txt).
1.8 -//
1.9 -// See http://www.boost.org/libs/utility for most recent version including documentation.
1.10 -
1.11 -// call_traits: defines typedefs for function usage
1.12 -// (see libs/utility/call_traits.htm)
1.13 -
1.14 -/* Release notes:
1.15 - 23rd July 2000:
1.16 - Fixed array specialization. (JM)
1.17 - Added Borland specific fixes for reference types
1.18 - (issue raised by Steve Cleary).
1.19 -*/
1.20 -
1.21 -#ifndef BOOST_DETAIL_CALL_TRAITS_HPP
1.22 -#define BOOST_DETAIL_CALL_TRAITS_HPP
1.23 -
1.24 -#ifndef BOOST_CONFIG_HPP
1.25 -#include <boost/config.hpp>
1.26 -#endif
1.27 -#include <cstddef>
1.28 -
1.29 -#include <boost/type_traits/is_arithmetic.hpp>
1.30 -#include <boost/type_traits/is_pointer.hpp>
1.31 -#include <boost/detail/workaround.hpp>
1.32 -
1.33 -namespace boost{
1.34 -
1.35 -namespace detail{
1.36 -
1.37 -template <typename T, bool small_>
1.38 -struct ct_imp2
1.39 -{
1.40 - typedef const T& param_type;
1.41 -};
1.42 -
1.43 -template <typename T>
1.44 -struct ct_imp2<T, true>
1.45 -{
1.46 - typedef const T param_type;
1.47 -};
1.48 -
1.49 -template <typename T, bool isp, bool b1>
1.50 -struct ct_imp
1.51 -{
1.52 - typedef const T& param_type;
1.53 -};
1.54 -
1.55 -template <typename T, bool isp>
1.56 -struct ct_imp<T, isp, true>
1.57 -{
1.58 - typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
1.59 -};
1.60 -
1.61 -template <typename T, bool b1>
1.62 -struct ct_imp<T, true, b1>
1.63 -{
1.64 - typedef const T param_type;
1.65 -};
1.66 -
1.67 -}
1.68 -
1.69 -template <typename T>
1.70 -struct call_traits
1.71 -{
1.72 -public:
1.73 - typedef T value_type;
1.74 - typedef T& reference;
1.75 - typedef const T& const_reference;
1.76 - //
1.77 - // C++ Builder workaround: we should be able to define a compile time
1.78 - // constant and pass that as a single template parameter to ct_imp<T,bool>,
1.79 - // however compiler bugs prevent this - instead pass three bool's to
1.80 - // ct_imp<T,bool,bool,bool> and add an extra partial specialisation
1.81 - // of ct_imp to handle the logic. (JM)
1.82 - typedef typename boost::detail::ct_imp<
1.83 - T,
1.84 - ::boost::is_pointer<T>::value,
1.85 - ::boost::is_arithmetic<T>::value
1.86 - >::param_type param_type;
1.87 -};
1.88 -
1.89 -template <typename T>
1.90 -struct call_traits<T&>
1.91 -{
1.92 - typedef T& value_type;
1.93 - typedef T& reference;
1.94 - typedef const T& const_reference;
1.95 - typedef T& param_type; // hh removed const
1.96 -};
1.97 -
1.98 -#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x581 ) )
1.99 -// these are illegal specialisations; cv-qualifies applied to
1.100 -// references have no effect according to [8.3.2p1],
1.101 -// C++ Builder requires them though as it treats cv-qualified
1.102 -// references as distinct types...
1.103 -template <typename T>
1.104 -struct call_traits<T&const>
1.105 -{
1.106 - typedef T& value_type;
1.107 - typedef T& reference;
1.108 - typedef const T& const_reference;
1.109 - typedef T& param_type; // hh removed const
1.110 -};
1.111 -template <typename T>
1.112 -struct call_traits<T&volatile>
1.113 -{
1.114 - typedef T& value_type;
1.115 - typedef T& reference;
1.116 - typedef const T& const_reference;
1.117 - typedef T& param_type; // hh removed const
1.118 -};
1.119 -template <typename T>
1.120 -struct call_traits<T&const volatile>
1.121 -{
1.122 - typedef T& value_type;
1.123 - typedef T& reference;
1.124 - typedef const T& const_reference;
1.125 - typedef T& param_type; // hh removed const
1.126 -};
1.127 -
1.128 -template <typename T>
1.129 -struct call_traits< T * >
1.130 -{
1.131 - typedef T * value_type;
1.132 - typedef T * & reference;
1.133 - typedef T * const & const_reference;
1.134 - typedef T * const param_type; // hh removed const
1.135 -};
1.136 -#endif
1.137 -#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
1.138 -template <typename T, std::size_t N>
1.139 -struct call_traits<T [N]>
1.140 -{
1.141 -private:
1.142 - typedef T array_type[N];
1.143 -public:
1.144 - // degrades array to pointer:
1.145 - typedef const T* value_type;
1.146 - typedef array_type& reference;
1.147 - typedef const array_type& const_reference;
1.148 - typedef const T* const param_type;
1.149 -};
1.150 -
1.151 -template <typename T, std::size_t N>
1.152 -struct call_traits<const T [N]>
1.153 -{
1.154 -private:
1.155 - typedef const T array_type[N];
1.156 -public:
1.157 - // degrades array to pointer:
1.158 - typedef const T* value_type;
1.159 - typedef array_type& reference;
1.160 - typedef const array_type& const_reference;
1.161 - typedef const T* const param_type;
1.162 -};
1.163 -#endif
1.164 -
1.165 -}
1.166 -
1.167 -#endif // BOOST_DETAIL_CALL_TRAITS_HPP