I know that in C++11 we can now use using to write type alias, like typedef s:

typedef int MyInt;

Is, from what I understand, equivalent to:

using MyInt = int;

And that new syntax emerged from the effort to have a way to express " template typedef ":

template< class T > using MyType = AnotherType< T, MyAllocatorType >;

But, with the first two non-template examples, are there any other subtle differences in the standard? For example, typedef s do aliasing in a "weak" way. That is it does not create a new type but only a new name (conversions are implicit between those names).