C++ - meaning of a statement combining typedef and typename

C++TypedefTypename

C++ Problem Overview


In a C++ header file, I am seeing this code:

typedef typename _Mybase::value_type value_type;

Now, as I understand, quoting from « C++ the Complete Reference » by Schildt. typename can be substituted by keyword class, the second use of typename is to inform the compiler that a name used in a template declaration is a type name rather than an object name.

Similarly, you can define new data type names by using the keyword typedef. You are not actually creating a new data type, but rather defining a new name for an existing type.

However, can you explain exactly what is the meaning of the above line of code, where typedef and typename are combined together. And what does the "::" in the statement imply?

C++ Solutions


Solution 1 - C++

typedef is defining a new type for use in your code, like a shorthand.

typedef typename _MyBase::value_type value_type;
value_type v;
//use v

typename here is letting the compiler know that value_type is a type and not a static member of _MyBase.

the :: is the scope of the type. It is kind of like "is in" so value_type "is in" _MyBase. or can also be thought of as contains.

Solution 2 - C++

the typename is saying that _Mybase::value_type is the name of type so the typedef can reley on that fact.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionArvindView Question on Stackoverflow
Solution 1 - C++pippin1289View Answer on Stackoverflow
Solution 2 - C++Paul EvansView Answer on Stackoverflow