gpt4 book ai didi

c++ - 为什么 MSVC 2019 在以三元形式返回静态大小的数组时失败?

转载 作者:行者123 更新时间:2023-12-01 14:07:00 24 4
gpt4 key购买 nike

我正在尝试编译一些 library code并遇到错误;我简化了示例,我有以下 MVCE,它无法使用 MSVC 2019 进行编译并出现错误

error C2440: 'return': cannot convert from 'const char *' to 'const char (&)[20]'

static constexpr const char somethingWeird[] = "Well, that's odd...";
void fail() { throw 0; }

// This doesn't work
constexpr const char(&checkNullTerminatedGood(const char(&a)[20]))[20]{
return a[19] == char(0) ? decltype(a)(a) : (fail(), decltype(a)(a));
}
static constexpr const auto somethingElseNew = checkNullTerminatedGood(somethingWeird);
当我将三元运算符转换为正确的 if 语句时,代码编译良好:
static constexpr const char somethingWeird[] = "Well, that's odd...";
void fail() { throw 0; }

// This works
constexpr const char(&checkNullTerminatedGood(const char(&a)[20]))[20]{
if (a[19] == char(0)) {
return decltype(a)(a);
} else {
return (fail(), decltype(a)(a));
}
}
static constexpr const auto somethingElseNew = checkNullTerminatedGood(somethingWeird);
这是 MSVC 中的错误吗?第一个片段使用 GCC 和 Clang 编译。

最佳答案

一点googling显示这是 know problem据称是固定的(但事实并非如此)。
C++ Overly aggressive decay of static array to pointer in ternary operator - Developer Community

Solution

by Leo Zhang [MSFT]    Sep 07, 2017 at 02:35 AM

avatar image

Thank you for your feedback! This issue has been fixed and it will be available in the next update to Visual Studio 2017. Thank you for helping us build a better Visual Studio!”

关于c++ - 为什么 MSVC 2019 在以三元形式返回静态大小的数组时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63672002/

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