Boost logo

Boost :

From: AlisdairM (alisdair.meredith_at_[hidden])
Date: 2006-02-12 08:33:05


The following patch solves the bad array type being picked up in the
call_traits tests, leaving one test unsolved.

It also confirms the workarounds are still needed for BCB2006.

Note the minor case of switching order of T and const.
This is due to a bug I only fully appreciated today.

depending on order of add_const and add_ref, BCB will deduce 2
*different* types.

int const &
int & const

The latter does not sound like a 'real' type to me, so I suggest always
placing const before the type, rather than after, when dealing with
template type-parameters - unless we have cases where this makes a real
difference for conforming compilers.

Rest of the patch should be straightforward.

AlisdairM

cvs diff -u -wb -- boost\detail\call_traits.hpp (in directory
E:\sourceforge\devel\boost\)
Index: boost/detail/call_traits.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/detail/call_traits.hpp,v
retrieving revision 1.15
diff -u -w -b -r1.15 call_traits.hpp
--- boost/detail/call_traits.hpp 12 Aug 2005 19:06:10 -0000 1.15
+++ boost/detail/call_traits.hpp 12 Feb 2006 13:23:16 -0000
@@ -58,7 +58,7 @@
 template <typename T, bool b1>
 struct ct_imp<T, true, b1>
 {
- typedef T const param_type;
+ typedef const T param_type;
 };
 
 }
@@ -92,7 +92,7 @@
    typedef T& param_type; // hh removed const
 };
 
-#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x570 ) )
+#if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x581 ) )
 // these are illegal specialisations; cv-qualifies applied to
 // references have no effect according to [8.3.2p1],
 // C++ Builder requires them though as it treats cv-qualified
@@ -121,6 +121,15 @@
    typedef const T& const_reference;
    typedef T& param_type; // hh removed const
 };
+
+template <typename T>
+struct call_traits< T * >
+{
+ typedef T * value_type;
+ typedef T * & reference;
+ typedef T * const & const_reference;
+ typedef T * const param_type; // hh removed const
+};
 #endif
 #if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
 template <typename T, std::size_t N>

-- 
AlisdairM

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk