Hacker News new | past | comments | ask | show | jobs | submit login

In C++11 you can write "typedef templates". However, as "typedef" has always been a misleading keyword (it does not define a new type, it declares an alias for an existing type) it was decided to instead overload the using keyword:

    template <typename T>
    using MyVector = std::vector<T, MyAlloc>;
As a side effect, it is now also possible to use using as a 1:1 replacement for typedef:

    // strictly equivalent to typedef int MyInt;
    using MyInt = int;



After reading the C++ FAQ on this I can accept that using tyepdef may have been impossible/confusing, but why overload "using"?

This is one of the things that makes C++ mega-complicated. The same keywords have different meanings based on context, when really a new keyword should just have been used. For example "virtual" functions vs "virtual" inheritance.


The moment you add a keyword to a popular language, you break lots of existing code that happen to have that keyword as an identifier, e.g. as a variable, class or function. This means that when adding features that need a new keyword, you best overload an existing one.

It's for this reason, too, that Java 7 overloaded `try` to implement some sort of poor-man's-RAII-support, instead of adding a new keyword (such as C#'s `using`, which does the same, and was by the way also overloaded for the same reason)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: