This is not a question about the difference between using
and typedef
for creating type aliases. I would like to provide access to an existing type from a namespace inside a code block or a function.
I found two different ways :
I can "include" the type with a using declaration :
using typename mynamespace::mytype;
Or I can create a type alias :
typedef mynamespace::mytype mytype;
using mytype = mynamespace::mytype; //C++11
Thank you.
Related question : Using-declaration of an existing type from base class vs creating a type alias inside child class
Is there any difference ?
A type alias for a name in a namespace can appear in a class
struct S { using mytype = mynamespace::mytype; };
while a using-declaration may not.
What are the pros and cons of each syntax ?
The previous point is a pretty big con if you are dealing with class scope.
Other than that the two approaches are pretty much similar. An alias is a new name that stands exactly for the type that is aliased. While a using declaration brings the existing name of the type into scope. If you use mytype
for both, you won't notice a difference.
Which one is the most used/recommended ?
I doubt there's consensus on this. Use the one you have to when you have to (class scope), but stick to your team's style guide otherwise.