c – 模板别名的身份
让我们考虑一组模板别名:
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和cl ang 3.5对待他们都不同 第14.5.7节“别名模板”中的标准C 11不清楚. 解决方法
正如
T.C.在
his comment指出的那样,这是
known hole的标准.
也就是说:foo,bar和buz的任何专业化将代表相同的类型.但不能保证,当用作模板参数时,foo,bar和buz是可互换的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |