gpt4 book ai didi

c++ - `void f(A<0>, tuple)` 不是比 `void f(A, tuple)` 更专业吗?

转载 作者:IT老高 更新时间:2023-10-28 22:41:27 25 4
gpt4 key购买 nike

#include <tuple>

template<int I>
struct A {};

template<int I, typename... T>
void f(A<I>, std::tuple<T *...>) {}

template<typename... T>
void f(A<0>, std::tuple<T *...>) {}

int main()
{
f(A<0>{}, std::tuple<char*, int*, float*>{});
}

不是f 的第二次重载吗?更专业? g++ 4.9.2 表示调用不明确,clang 3.6.0 接受它。哪个编译器是对的?

有趣的是,如果您更改 std::tuple<T *...>std::tuple<T...> , g++ 就可以了,这个我没看懂。

最佳答案

根据当前规则,第二个重载更加特化。一些专业 A<@>具有合成值 @无法与 A<0> 匹配, 但是 A<0>可以匹配 A<I> (与 I=0 )。第一对的不对称性是决定性的。无论您使用TT*因为第二个参数中的模式是无关紧要的,因为该对的推论是双向成功的。

该错误仍然存​​在于主干中,并由@Barry 报告为67228 .

关于c++ - `void f(A<0>, tuple<T *...>)` 不是比 `void f(A<I>, tuple<T *...>)` 更专业吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025188/

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