gpt4 book ai didi

c++ - 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?

转载 作者:行者123 更新时间:2023-12-01 13:08:19 25 4
gpt4 key购买 nike

考虑以下示例:

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>();
Clang 生成名为 int f<int>() 的符号而 GCC 生成 B::type f<int>()用于实例化: https://godbolt.org/z/MCCza4
为什么编译器不同意,也不应该 GCC 也解析 B::typeint ?

最佳答案

这是一个已知的 C++ CWG(核心工作组)问题:https://wg21.cmeerw.net/cwg/issue2037 , 引用 Richard Smith :

On the one hand, the alias template can introduce SFINAE conditions, so it should be instantiation-dependent and mangled. On the other hand, the language rules permit this template to be redeclared using the result of expanding the alias template, so mangling it can't be correct.

关于c++ - 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62767544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com