gpt4 book ai didi

c++ - 一个 friend 的缩写模板函数——clang和gcc的区别

转载 作者:行者123 更新时间:2023-12-01 13:47:55 26 4
gpt4 key购买 nike

以下代码compiles with clang but not with gcc :

template<typename T>
class number {
T num;
public:
number(T num = 0): num(num) {}

friend auto add(auto a, auto b);
};

auto add(auto a, auto b) {
// the decltype(a) is needed to make clang happy
// see: https://stackoverflow.com/questions/62779242
return number<decltype(a)>{a}.num + number<decltype(b)>{b}.num;
}

int main() {
auto result = add(1.0, 2.0);
}
gcc 提供的编译错误(版本 10.1 with -std=c++20):
In instantiation of 'auto add(auto:13, auto:14) [with auto:13 = double; auto:14 = double]':
error: 'double number<double>::num' is private within this context
return number<decltype(a)>{a}.num + number<decltype(b)>{b}.num;
假设这是一个 gcc 错误是否合理?

最佳答案

显然这是 GCC 10.1.0 中的一个错误,在正常工作到 9.3 之后。
Bug was opened and fixed in GCC 10.3 .

关于c++ - 一个 friend 的缩写模板函数——clang和gcc的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62779488/

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