The way call_traits is currently implemented, call_traits<int&>::value_type is an int&, not an int. It seems to run contrary to the rationale given in http://www.boost.org/libs/utility/call_traits.htm :
"Defines a type that represents the "value" of type T. Use this for functions that return by value, or possibly for stored values of type T." Also, it runs contrary to standard practice. In several places in the standard library "value_type" is assumed to be a value, not a reference. For instance, std::stack is defined as : template<typename T, typename Cont = deque<T> > class stack { typedef typename Cont::value_type value_type; value_type & top(); }; For this to work, value_type can never be a reference. Likewise for iterator_traits::value_type. As it is often used to declare temporary variables in algorithms, it would be very bad if it were allowed to be a reference, creating aliases instead of temporaries. (I can't find where in the standard iterator_traits::value_type is actually required to be a true value type instead of a reference, though.) Is this an oversight in call_traits? Or just an unfortunately named typedef? Thanks, Eric _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost