vit*_*aut 6 c++ gcc clang name-mangling type-alias
考虑以下示例:
struct A {
using type = int;
};
template <typename T>
using B = A;
template <typename T>
typename B<T>::type f() { return {}; }
template B<int>::type f<int>();
Run Code Online (Sandbox Code Playgroud)
Clang 生成符号,int f<int>()而 GCC 生成B::type f<int>()实例化:https : //godbolt.org/z/MCCza4
为什么不同意的编译器,不应该GCC还决心B::type要int?
这是一个已知的 C++ CWG(核心工作组)问题: https: //wg21.cmeerw.net/cwg/issue2037,引用Richard Smith:
一方面,别名模板可以引入 SFINAE 条件,因此它应该依赖于实例化并受到破坏。另一方面,语言规则允许使用扩展别名模板的结果重新声明该模板,因此对其进行修改是不正确的。
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |