Почему MSVC 2019 терпит неудачу при возвращении статического размера массива в тройной?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему MSVC 2019 терпит неудачу при возвращении статического размера массива в тройной?

Сообщение Anonymous »

Я пытаюсь скомпилировать код библиотеки и столкнуться с ошибкой; Я упростил пример, и у меня есть следующий 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»