From: Yitzhak Sapir (ysapir_at_[hidden])
Date: 2002-02-04 14:34:53


Would it be possible to fix ob_call_traits so it reads:
template <typename T>
struct call_traits
{
private:
   typedef detail::call_traits_chooser<(is_pointer<T>::value,
is_reference<T>::value> chooser;
   typedef typename chooser::template rebind<T> bound_type;
   typedef typename bound_type::type call_traits_type;
public:
   typedef typename call_traits_type::value_type value_type;
   typedef typename call_traits_type::reference reference;
   typedef typename call_traits_type::const_reference const_reference;
   typedef typename call_traits_type::param_type param_type;
};
instead of:
template <typename T>
struct call_traits
{
private:
   typedef detail::call_traits_chooser<(is_pointer<T>::value ||
is_arithmetic<T>::value) && sizeof(T) <= sizeof(void*),
is_reference<T>::value> chooser;
   typedef typename chooser::template rebind<T> bound_type;
   typedef typename bound_type::type call_traits_type;
public:
   typedef typename call_traits_type::value_type value_type;
   typedef typename call_traits_type::reference reference;
   typedef typename call_traits_type::const_reference const_reference;
   typedef typename call_traits_type::param_type param_type;
};

There's a bug on MSVC 6.0 SP5 when you try to use it for long& (I think
it was long& that caused the problem).

Also, would you be interested in code that allows void returns for
functional.hpp on MSVC6.0 SP5?