Boost logo

Boost :

From: Peder Holt (peder.holt_at_[hidden])
Date: 2004-08-27 14:54:38


Hi.
I have started implementing some of the missing type_traits
functionality for vintage compilers using typeof.
The following are complete, and seem to work flawlessly on VC 6.5 and 7.0:

remove_pointer
remove_reference
remove_bounds

The source is available at:
http://groups.yahoo.com/group/boost/files/typeof_vintage.zip

The use of typeof in this respect, makes remove_xxx much more
flexible. Would it be possible to start using this scheme for
compilers without partial template specialization support?

#define BOOST_MAX_TYPEOF_SIZE 20

#include <boost/test/minimal.hpp>
//Include typeof_define.hpp in all header files where new types are
added to typeof.
#include <boost/typeof/typeof_define.hpp>
#include <complex>

#include <boost/type_traits/remove_reference.hpp>
#include <boost/type_traits/remove_pointer.hpp>
#include <boost/type_traits/remove_bounds.hpp>
#include <boost/type_traits/is_same.hpp>

template<typename A0>
struct X {};
template<typename A0,unsigned int A1>
struct Y {};
template<typename A0,typename A1,long A2>
struct Z {};

BOOST_TYPEOF_DEFINE_TEMPLATE(X,1,(typename))
BOOST_TYPEOF_DEFINE_TEMPLATE(Y,2,(typename,unsigned int))
BOOST_TYPEOF_DEFINE_TEMPLATE(Z,3,(typename,typename,long))

BOOST_TYPEOF_DEFINE_TEMPLATE(std::complex,1,(typename))

int
test_main(int, char*[])
{
    BOOST_TEST((boost::is_same<X<int>*
const[8][9],boost::remove_bounds<X<int>*
const[5][8][9]>::type>::value));
    BOOST_TEST((boost::is_same<Z<X<double&>,Y<bool[4][7],12324>,0>*
const*,boost::remove_pointer<Z<X<double&>,Y<bool[4][7],12324>,0>*
const**volatile>::type>::value));
    //VC7.1 fails to compile remove_reference.
    BOOST_TEST((boost::is_same<Y<int,345>**
const,boost::remove_reference<Y<int,345>** const&>::type>::value));

    typedef BOOST_TYPEOF(5.+std::complex<double>(6,7)) result_type;
    BOOST_TEST((boost::is_same<result_type,std::complex<double> >::value));

    return 0;
}

--
Peder Holt

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