让我们考虑一组模板别名:
template<class T> using foo = T*;
template<class T> using bar = T*;
template<class T> using buz = foo<T>;
template< template<class>class TT > struct id {};
using id_foo = id<foo>;
using id_bar = id<bar>;
using id_buz = id<buz>;
id_foo
, id_bar
,是id_buz
相同的还是不同的类型?foo
, bar
,是buz
相同的还是不同的模板?
不同的编译器对此有不同的看法。特别,
- MSVC 2015 和 clang 3.5 对待它们都是不同的
- gcc 4.9 对待
buz
与foo
第 14.5.7 章“别名模板”中的标准 C++11 不清楚。