#c #visual-c
#c #visual-c
Вопрос:
Есть код
#include <array>
struct Foo {
int bar;
};
int main() {
constexpr auto v = std::array{Foo{}};
return 0;
}
При компиляции с C 17:
фатальная ошибка C1001: внутренняя ошибка компилятора. … (файл компилятора ‘msc1.cpp ‘, строка 1591)
ВНУТРЕННЯЯ ОШИБКА КОМПИЛЯТОРА в ‘C:Program Файлы (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.27.29110binHostX86x86CL.exe ‘
Но это — компилирует
#include <array>
struct Foo {
int bar;
};
int main() {
constexpr std::array<Foo, 1> v{Foo{}};
return 0;
}
Все оптимизации отключены, как описано здесь
Это ошибка компилятора?
Комментарии:
1. Я бы сказал, что внутренняя ошибка компилятора всегда является ошибкой, даже если код, который приводит к ней, недействителен.
Ответ №1:
Это похоже на ту же ошибку, о которой сообщалось developercommunity.visualstudio.com при регрессии: внутренняя ошибка компилятора c в версии 16.7.0 с /std: c 17 (файл компилятора ‘msc1.cpp ‘, строка 1591). Я предлагаю вам проголосовать за это сообщение об ошибке и следить за ним для возможных решений.
Проблема была введена в обновлении 16.7.0 и не исправлена по состоянию на последнюю версию 16.7.5. Промежуточные обходные пути — вернуться к 16.6.5 или удалить /std:c 17
и /std:default
/std:c 14
вместо этого использовать or .
Комментарии:
1. Возможно, они заменят msvc на clang)
2. @АлександрТрушин Этого не произойдет 😉 но я вижу в тикете, что MS наконец-то признала ошибку и пообещала исправить.
3. Есть прогресс: developercommunity.visualstudio.com/content/problem/1139953 /…
4. @АлександрТрушин Приятно знать, спасибо за доработку. Я обновлю ответ, когда исправление будет опубликовано публично.