|
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