gpt4 book ai didi

c++ - 分支中的 Lambda 未采用常量表达式 : Who is right?

转载 作者:可可西里 更新时间:2023-11-01 18:39:24 25 4
gpt4 key购买 nike

我尝试编译以下 C++11 代码,但结果不一。

struct NoTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};

NoTemplate no_inst;


template<typename>
struct YesTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};

YesTemplate<float> yes_inst;
  • clang: 成功编译NoTemplate;在 YesTemplate 上给出 error: a lambda expression may not appear inside a constant expression
  • gcc:编译成功
  • msvc:崩溃。
  • icc:崩溃(我们有一个赢家!)

正确的结果是什么?我看到一些标准语言建议在常量表达式中短路运算符的假分支中非常量表达式应该没问题,但 IANALL。

最佳答案

这个程序是良构的。

请注意,在 C++17 之后,核心常量表达式中可以接受 lambda 表达式,即使它会被求值。可以看到建议的论文N4487了解详情。

关于c++ - 分支中的 Lambda 未采用常量表达式 : Who is right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895805/

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