Search code examples
c++typedeftype-aliasusing-declaration

Using-declaration of an existing namespace type vs creating a type alias


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
  1. Is there any difference ?
  2. What are the pros and cons of each syntax ?
  3. Which one is the most used/recommended ?

Thank you.

Related question : Using-declaration of an existing type from base class vs creating a type alias inside child class


Solution

  • 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.