gpt4 book ai didi

c++ - 空参数包扩展不同于手动空参数包

转载 作者:太空狗 更新时间:2023-10-29 21:39:12 28 4
gpt4 key购买 nike

GCC 似乎将空参数包 A 扩展为另一个参数包 B 不同于手动输入空参数包B。示例:

void baz();
void baz(int);

template<typename... Args, typename R>
void bar(R (*)(Args...));

template<typename... Args>
void foo()
{
bar<Args...>(baz);
}

int main()
{
foo<>(); // Deduces baz()
//bar<>(baz); // Ambiguous
foo<int>(); // Deduces baz(int)
bar<int>(baz); // Deduces baz(int)
//foo<void>(); // Ambiguous
//bar<void>(baz); // Ambiguous
}

这种行为是否符合标准?您可以看到差异的实例 herehere .

最佳答案

f<>不强制空包,只告诉模板参数的前 0 个参数。

Clang 拒绝 foo<>() ( Demo ) 因为它无法决定 baz 的哪个重载对于 bar<>(baz);

gcc 接受它的事实似乎是一个错误。

关于c++ - 空参数包扩展不同于手动空参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33521416/

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