gpt4 book ai didi

c++ - 函数模板参数推导是否应该考虑转换运算符?

转载 作者:行者123 更新时间:2023-12-01 14:02:28 25 4
gpt4 key购买 nike

考虑以下 code :

template<typename>
struct S
{
operator S<int&>();
};

template<typename T>
void f(S<T&>);

int main()
{
f(S<int&&>{}); // gcc ok
// clang error
}
gcc 在临时参数上使用转换运算符,返回 S<int&>S<T&> 匹配,并接听电话。
clang 不考虑转换运算符,无法匹配 T&反对 int&& , 并拒接来电。
那么语言说这里应该发生什么?

最佳答案

GCC在这里肯定是错误的:T&T&&是 [temp.deduct.type]/8 中的不同行,因此不兼容。为什么这样做尚不清楚。在另一个方向犯错会更有意义:如果参数被声明为 S<T&&>并且参数的类型是 S<int&> ,至少会有一个 T (即, int& )使得(由于引用折叠)参数和参数类型相同。 (如果说涉及到通用引用,也很容易犯错误。)

关于c++ - 函数模板参数推导是否应该考虑转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63590084/

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