$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] Can not compile a program that uses typeof package by	gcc?
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2008-10-20 12:14:23
AMDG
Peng Yu wrote:
>   template <typename T1, typename T2>
>     struct multiply_traits;
>
>   template <typename T1, typename T2>
>     struct multiply_traits<X<T1>, T2> {
>       typedef X<T1> result_type;
>     };
>   
The most reliable way to define multiply_traits in general is
template<class T>
T make();
template<class T1, class T2>
struct multiply_traits {
    BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, make<T1>() * make<T2>());
    typedef typename nested::type type;
};
>     Y<BOOST_TYPEOF(T1() * T2())> operator*(const Y<T1> &y, const T2 &t) 
You need to use BOOST_TYPEOF_TPL.
http://www.boost.org/doc/libs/1_36_0/doc/html/typeof/refe.html#typeof.typo.
Some compilers can handle this (I just tried it on msvc 9.0), but I strongly
advise using multiply_traits as defined above for portability.
In Christ,
Steven Watanabe