Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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>; 使用foo=T*的模板; 使用bar=T*的模板; 使用buz=foo的模板; 模板结构id{}; 使用id_foo=id; 使用id_bar=id; 使用id_buz=id;_C++_Templates_C++11_Standards_Template Aliases - Fatal编程技术网

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>; 使用foo=T*的模板; 使用bar=T*的模板; 使用buz=foo的模板; 模板结构id{}; 使用id_foo=id; 使用id_bar=id; 使用id_buz=id;

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>; 使用foo=T*的模板; 使用bar=T*的模板; 使用buz=foo的模板; 模板结构id{}; 使用id_foo=id; 使用id_bar=id; 使用id_buz=id;,c++,templates,c++11,standards,template-aliases,C++,Templates,C++11,Standards,Template Aliases,id\u foo、id\u bar、id\u buz类型相同还是不同?foo、bar、buz是相同还是不同的模板 不同的编者对此有不同的看法。 特别是, MSVC 2015和clang 3.5都是不同的 gcc 4.9对待buz与foo 第14.5.7章“别名模板”中的标准C++11不清楚。正如问题中所指出的,这是标准的一部分 14.5.7[临时别名]的当前措辞仅涉及别名模板的专门化与替换后的类型id的等效性。需要添加措辞,指定在什么情况下别名模板本身等同于类模板 也就是说:foo、bar和

id\u foo
id\u bar
id\u buz
类型相同还是不同?
foo
bar
buz
是相同还是不同的模板

不同的编者对此有不同的看法。 特别是,

  • MSVC 2015和clang 3.5都是不同的
  • gcc 4.9对待
    buz
    foo
第14.5.7章“别名模板”中的标准C++11不清楚。

正如问题中所指出的,这是标准的一部分

14.5.7[临时别名]的当前措辞仅涉及别名模板的专门化与替换后的类型id的等效性。需要添加措辞,指定在什么情况下别名模板本身等同于类模板


也就是说:
foo
bar
buz
的任何专门化都将代表相同的类型。但不能保证,当用作模板参数时,
foo
bar
buz
是可互换的。

的解释似乎暗示是的,它们是相同的IMO。编辑:相关代码片段:
别名模板是一个模板,当专门化时,相当于将别名模板的模板参数替换为类型id中的模板参数的结果。
以下问题的答案可能会有帮助:@T.C.除了它只是一个链接之外,这怎么不是答案P