Я пытаюсь скомпилировать код библиотеки и столкнуться с ошибкой; Я упростил пример, и у меня есть следующий MVCE, который не собирается компилировать с MSVC 2019 с ошибкой < /p>
Ошибка C2440: 'return': не может конвертировать из 'const char *' в 'const char (&) [20]' < /p>
< /blockquote>
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);
< /code>
Когда я преобразую тройный оператор в правильное положение, код хорошо компилируется: < /p>
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);
< /code>
Это ошибка в MSVC? Первый фрагмент компиляции с GCC и Clang.
Подробнее здесь: https://stackoverflow.com/questions/636 ... -a-ternary