【发布时间】:2021-06-24 06:00:11
【问题描述】:
根据cppreference,gcc和clang最近都完成了P1102R2("Down with ()!")的实现,这意味着我们可以在C中更简洁地定义lambda表达式++23.
但我发现它们与某种形式不一致:
auto l = []<auto> noexcept requires true {};
clang 接受这种形式,gcc rejects 它的语法。
我应该信任哪个编译器?这个 lambda 在 C++23 中是格式正确还是格式错误?
更新:
可能是迫于舆论压力,我举报后五天内clang迅速修复了49736。
当我进一步尝试时,我偶然发现 gcc 也拒绝了以下有效表单,这让我报告了 99850 并在 2 周后修复。
auto l = []<auto> requires true -> void {};
【问题讨论】:
-
看起来这个 lambda 没有任何实际应用。添加 language-lawyer 标签可能是个好主意。
-
我不相信任何 C++23 功能的实现来自一个甚至还没有完成 C++20 的编译器。另外,您甚至会使用什么命令行选项来访问它?
-
@NicolBolas GCC 和 Clang 中继了解
-std=c++2b。 -
“也许是因为舆论的压力”——+1 只是为了那个笑话。
标签: c++ lambda language-lawyer c++23