identity< T > Struct Template Reference

List of all members.

Public Types

typedef T type


Detailed Description

template<typename T>
struct identity< T >

A template class that simply exports its template argument as a local typedef. This class, while at first appearing useless, makes sense in the following context: if you have a function template as follows:
   template <typename T> void f(T, T);
then it can't be called in an expression like f(1, 3.141) because the type T of the template can not be deduced in a unique way from the types of the arguments. However, if the template is written as
   template <typename T> void f(T, typename identity<T>::type);
then the call becomes valid: the type T is not deducible from the second argument to the function, so only the first argument participates in template type resolution.

The context for this feature is as follows: consider

 template <typename RT, typename A>
 void forward_call(RT (*p) (A), A a)  { p(a); }

 void h (double);

 void g()
 {
   forward_call(&h, 1);
 }
This code fails to compile because the compiler can't decide whether the template type A should be double (from the signature of the function given as first argument to forward_call, or int because the expression 1 has that type. Of course, what we would like the compiler to do is simply cast the 1 to double. We can achieve this by writing the code as follows:
 template <typename RT, typename A>
 void forward_call(RT (*p) (A), typename identity<A>::type a)  { p(a); }

 void h (double);

 void g()
 {
   forward_call(&h, 1);
 }

Author:
Wolfgang Bangerth, 2008

Member Typedef Documentation

template<typename T>
typedef T identity< T >::type


The documentation for this struct was generated from the following file:

deal.II documentation generated on Thu Mar 11 23:10:24 2010 by doxygen 1.5.9