C++ 类型别名和使用声明之间的区别

C++ 类型别名和使用声明之间的区别,c++,c++11,types,namespaces,typeid,C++,C++11,Types,Namespaces,Typeid,一方面使用类型别名和别名模板,另一方面使用声明,两者之间有什么区别吗?定义如下: 给定命名空间范围中的类定义: namespace ns1 { template< typename T > struct A {}; } 第二个是使用声明: ADL与ns1scope(重新打开)、ns2scope或外部scope中的任何其他使用上下文是否有任何区别?对于ADL n4527[basic.lookup.argdep]/4.1说,任何使用指令都将被忽略 namespace ns2 { tem

一方面使用类型别名和别名模板,另一方面使用声明,两者之间有什么区别吗?定义如下:

给定命名空间范围中的类定义:

namespace ns1
{
template< typename T >
struct A {};
}
第二个是使用声明:


ADL与
ns1
scope(重新打开)、
ns2
scope或外部scope中的任何其他使用上下文是否有任何区别?

对于ADL n4527[basic.lookup.argdep]/4.1说,任何使用指令都将被忽略
namespace ns2
{
template< typename T >
using A = ns1::A< T >; // match type-id
}
namespace ns2
{
using ns1::A;
}