Я использую Visual Studio 2015 Обновление 3.
Я получаю фатальную ошибку:
(код C1001): в компиляторе произошла внутренняя ошибка.
Вот код:
template<typename T>
constexpr T epsilon = std::numeric_limits<T>::epsilon();
Я прочитал, что это было исправлено в Visual Studio Update 2. Может кто-нибудь объяснить мне, почему я получаю эту ошибку? Заранее спасибо.
Любая внутренняя ошибка (ICE) является ошибкой компилятора. Вы получаете это, потому что вы случайно вызвали эту ошибку. Об этом компиляторе вы можете сообщить в Microsoft Connect.
Для такого отчета вам нужен пример с ожидаемым правильным результатом и ошибочным результатом.
Следующая тестовая программа компилирует & прекрасно работает с MinGW g ++ 5.1
#include <limits>
template<typename T>
constexpr T epsilon = std::numeric_limits<T>::epsilon();
#include <iostream>
using namespace std;
auto main() -> int
{
cout << epsilon<double> << endl;
}
Выход:
2.22045e-016
В Visual C ++ 2015 с обновлением 2 он создает ICE:
foo.cpp (10): фатальная ошибка C1001: в компиляторе произошла внутренняя ошибка. (файл компилятора 'f: \ dd \ vctools \ compiler \ cxxfe \ sl \ p1 \ c \ symbols.c', строка 28114) Чтобы обойти эту проблему, попробуйте упростить или изменить программу рядом с местами, перечисленными выше. Пожалуйста, выберите команду технической поддержки на Visual C ++ Меню справки или откройте файл справки технической поддержки для получения дополнительной информации foo.cpp (10): примечание: см. ссылку на компилируемый шаблон переменной 'const double epsilon'
Версия компилятора:
> кл / нолого- 2>&1 | найти "++" Оптимизирующий компилятор Microsoft (R) C / C ++ версии 19.00.23725 для x86
Я назвал это ошибкой в Microsoft, но с начала 2017 года они исправили ошибку, которая не была выпущена из того, что я вижу на сегодняшний день.
Я также представил проект на GitLab и предоставил Microsoft информацию для этого проекта здесь: https://gitlab.com/cppocl/tostring
Загрузка .sln и компиляция в настоящее время приводит к сбоям в Visual Studio 2015 с обновлением 2 или 3 и Visual Studio Enterprise 2017 версии 15.3.1.
Кажется, что сочетание шаблона и constexpr приводит к сбою компилятора.
Я видел отчеты для Visual Studio 2017, описывающие подобные типы проблем.
Эта ссылка говорит о фиксированном ожидании релиза:
https://developercommunity.visualstudio.com/content/problem/18155/msvc-2017-c-fatal-error-c1001-constexpr-initializa.html
Визуальный список ошибок, связанных с constexpr, в Visual Studio 2015:
https://blogs.msdn.microsoft.com/vcblog/2015/12/02/constexpr-in-vs2015-update-1/
РЕДАКТИРОВАТЬ:
Я также не верю, что изменение настроек оптимизации будет иметь значение, как было рекомендовано в других постах.
Я экспериментировал с этими настройками и безуспешно применял рекомендуемые патчи.