This struct is a collection of type definitions that ease coding of template classes when the template parameter may be a non-array object, an array, or a reference. The type definitions specify how to pass a type into a function, and how to pass it back out either by value, reference or const reference. The interface is:
call_traits<T>::value_type call_traits<T>::reference call_traits<T>::const_reference call_traits<T>::param_type
The first three types are suggestions on how to return a type from a function by value, reference or const reference. The fourth type is a suggestion on how to pass a type into a method.
The call_traits struct is most useful in avoiding references to a reference which are currently illegal in C++. Another use is in helping to decay array-type parameters into pointers. In general, use of call_traits is limited to advanced techniques, and will not require specializations of call_traits to be made. For example uses of call_traits see compressed_pair. For an example specialization see alloc_ptr.