Optimization - 1: Cost of Forwarding
| template parameter T |
TypeTraits<T>::ParameterType |
| U | U if U is primitive; otherwise const U& |
| const U | U if U is primitive; otherwise const U& |
| U& | U& |
| const U& | const U& |
class TypeTraits
{
...
template <class U> struct ReferenceTraits
{
enum { result = false };
typedef U ReferredType;
};
template <class U> struct ReferenceTraits<U&>
{
enum { result = true };
typedef U ReferredType;
};
...
public:
...
enum { isReference = ReferenceTraits<T>::result };
typedef typename ReferenceTraits<T>::ReferredType ReferredType;
...
};