Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Intermediate
Sep 25, 1998

The Type-name Keyword

A type-name is merely a placeholder that has to be substituted with a proper type. For example:
 
template<class T> T min( const T& first, const T& second);  //T is a type-name, not a type
In some circumstances, an ambiguity between a type and a type-name may result:
 
int N;
template < class T > T func(){
T::A * N;  // ambiguous: a multiplication statement or a pointer declaration? 
//_
};
If T::A is a type-name, then N is a pointer; on the other hand, if T::A is a type, then "T::A * N" is an expression statement in which T::A is multiplied by a global int N.

By default, the compiler assumes that an expression like T::A is a type. The type-name keyword instructs the compiler to supersede this default interpretation and resolve the ambiguity in favor of a type-name rather than a type. In other words, the seemingly ambiguous statement above is actually resolved as a multiplication expression (the result of which is discarded). In order to declare a pointer, the type-name keyword is required:

 
int N;
template < class T > T func(){
typename T::A * N; // N is a now pointer since T::A is a type-name
//_
};
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date