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
Apr 5, 1999

Forward Declarations and Templates

It is illegal to use forward declarations with typedef names, as in:
 
   class string;
   void f(string& s); //illegal, string is a typedef name
Even a typename won't do here:
 
   typename  std::string; //still illegal
   void f(std::string& s);  
The problem with these forward declarations is that std::string is not a class, but a typedef name defined like this:
 
   typedef basic_string<char, char_traits<char>, allocator<char> >string;
In order to generate the correct mangled name for the function f, the compiler has to see the non-typedef'd form of its argument. In other words, there is no escape from #including the header <string> in this case.
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