On Mon, Oct 20, 2008 at 11:14 AM, Steven Watanabe
AMDG
Peng Yu wrote:
template
struct multiply_traits; template
struct multiply_traits { typedef X<T1> result_type; }; The most reliable way to define multiply_traits in general is
template<class T> T make();
template
struct multiply_traits { BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, make<T1>() * make<T2>()); typedef typename nested::type type; }; Y
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.
Does this mean the error that I saw is not due to a GCC bug? Or it is due to a GCC bug, but most other compilers would have the same bug so that I have to use your way as a walkaround? Thanks, Peng