
hmmm...decided to try and test this guy out and based on the docs I would think the following code would compile, but it doesn't in VC++ 8.0...g++ gobbles it up ok though.
A better fix is to replace the code between the #ifdef MCS_HAS_TYPEOF ... #endif // MCS_HAS_TYPEOF with the following: #ifdef MCS_HAS_TYPEOF template<typename X> struct unary_plus_typeof_helper { typedef typeof(+X()) type; }; template<typename X> struct unary_minus_typeof_helper { typedef typeof(-X()) type; }; template<typename X,typename Y> struct add_typeof_helper { typedef typeof(X()+Y()) type; }; template<typename X,typename Y> struct subtract_typeof_helper { typedef typeof(X()-Y()) type; }; template<typename X,typename Y> struct multiply_typeof_helper { typedef typeof(X()*Y()) type; }; template<typename X,typename Y> struct divide_typeof_helper { typedef typeof(X()/Y()) type; }; #else // MCS_HAS_TYPEOF template<typename X> struct unary_plus_typeof_helper { typedef X type; }; template<typename X> struct unary_minus_typeof_helper { typedef X type; }; template<typename X,typename Y> struct add_typeof_helper { BOOST_STATIC_ASSERT((is_same<X,Y>::value == true)); typedef X type; }; template<typename X,typename Y> struct subtract_typeof_helper { BOOST_STATIC_ASSERT((is_same<X,Y>::value == true)); typedef X type; }; template<typename X,typename Y> struct multiply_typeof_helper { BOOST_STATIC_ASSERT((is_same<X,Y>::value == true)); typedef X type; }; template<typename X,typename Y> struct divide_typeof_helper { BOOST_STATIC_ASSERT((is_same<X,Y>::value == true)); typedef X type; }; #endif // MCS_HAS_TYPEOF Matthias