gpt4 book ai didi

c++ - clang vs gcc - 空通用 lambda 可变参数包

转载 作者:可可西里 更新时间:2023-11-01 17:59:16 26 4
gpt4 key购买 nike

我想我发现了另一个 “clang vs gcc” lambda 和可调用对象之间的不一致。

decltype(l)::operator() 应该等同于 C::operator(),但是如果可变参数包在通用 lambda、gcc 中留空拒绝编译:

15 : error: no match for call to '(main()::) (int)' l(1);

15 : note: candidate: decltype (((main()::)0u).main()::(x, )) (*)(auto:1&&, auto:2&&, ...)

15 : note: candidate expects 3 arguments, 2 provided

14 : note: candidate: template main()::

auto l = [](auto&& x, auto&&...) { return x; };

14 : note: template argument deduction/substitution failed:

15 : note: candidate expects 2 arguments, 1 provided

l(1);

Live example on godbolt.org .

struct C
{
template<typename T, typename... TRest>
auto operator()(T&& x, TRest&&...){ return x; }
};

int main()
{
// Compiles both with clang and gcc.
auto c = C{};
c(1);

// Compiles with clang 3.7.
// Does not compile with gcc 5.2.
auto l = [](auto&& x, auto&&...) { return x; };
l(1);
}

在 gcc 错误跟踪器上找不到与此相关的任何内容(虽然没有花太多时间搜索) - gcc 在这里错了吗?

最佳答案

我已将该问题报告为 gcc 错误 #68071 .

关于c++ - clang vs gcc - 空通用 lambda 可变参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305208/

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