yorool_gui: (лысый)
[personal profile] yorool_gui
fatal error C1001: An internal error has occurred in the compiler.
compiler file 'msc1.cpp', line 1468)
To work around this problem, try simplifying or changing the program near the locations listed above.

Ну нифигаж себе. Только я подходящий шаблон придумал, и теперь вот так вот

Date: 2017-03-30 08:12 pm (UTC)
From: [identity profile] vikky-13.livejournal.com
Забавно. Я думаю,что напишу пост если проживу хотя бы один рабочий месяц без такой ошибки. Это -один из моих хитов и ремейков :)

Date: 2017-03-30 11:53 pm (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
Что же вы оба такое пишете?
Что один удивляется айсу (ice - internal compiler error), а второй ни месяца без него жить не может?

В принципе, студию можно уронить, особенно, на нетривиальных шаблонах.

Кстати, покажите ваш код, полюбоваться. Там может быть и настоящее UB, и тогда компилятор вправе упасть. А может и нечто легальное, тогда это не честный, а бесчестный баг компилятора.

Date: 2017-03-31 02:58 pm (UTC)
From: [identity profile] yorool-gui.livejournal.com
Что-то я не могу представить случай, когда компилятор вправе упасть. UB в коде - это оправдвние для программы, а не для компилятора.
А код - тупо шаблон с параметром - методом класса. Сейчас нет времени вычленять его из кода, но ничего свехсложного там не было

Date: 2017-03-31 04:15 pm (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
Нескомпилированная программа нулевого размера - это очень даже случай неопределённого поведения :)

Понятно, что падение компилятора - не оправдание.
Он должен побороться за робастность, выдать какую-нибудь самодиагностику - например, что у него из-за попытки вычислить нечто неопределённое во время компиляции кончилась память или произошла арифметическая ошибка.
Но вот ICE тоже бывают.

Вот форк-бомба, выморозившая компилятор gcc
#include <iostream>
using namespace std;

template<class X, class Y> struct cons {};

template<int D, int N> struct fork {
	using type = cons<typename fork<D-1,N+1>::type, typename fork<D-1,N+2>::type>;
};
template<int N> struct fork<0, N> {
	using type = void;
};

template<class T> void foo() {
	cout << __PRETTY_FUNCTION__ << endl;
}

int main() {
	foo< fork<30,0>::type >();
}

Всего-то надо было - нагенерить 2**30 типов и выписать строковый литерал.
(Кстати, выяснилось, что компилятор умеет забывать временно использованные воплощения шаблонов; __PRETTY_FUNCTION__ - один из способов не дать ему почистить кэш).
Несмотря на то, что у компилятора есть ограничения на глубину рекурсии при вычислениях времени компиляции (воплощения шаблонов, нахождение constexpr-значений), - несложным способом мы переводим глубину в ширину, и наигрываем проблему останова.
Edited Date: 2017-03-31 04:16 pm (UTC)

Date: 2017-03-31 04:36 pm (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
Шаблон с параметром - функцией-членом...
Ой, что-то такое знакомое. У студии были с этим проблемы.

Она очень болезненно относилась к созданию объектов-замыканий
using T = ...; // твой класс
using MF = void(T::*)(); // указатель на его функцию-член
T t;
MF mf;
do_something_with(t.*mf); // бабах!

Это ill-formed, а не UB, но раньше студию подрубало при некоторых условиях. Вроде бы пофиксили.

Ещё какую-то фигню один раз встретил - проблемы сопоставления не-типовых параметров шаблона.


Кстати, а какая версия студии?

Date: 2017-04-01 06:56 pm (UTC)
From: [identity profile] vikky-13.livejournal.com
Ради справедливости отмечу, что в 80% случаев речь идет не о родном компиляторе VS, а компиляторе Intel :) но оставшиеся 20% честно принадлежат Microsoft. Кстати, из последних достижений - VS 2013 со всеми апдейтами просто падает на этапе компиляции. Шаблоны бывают, но, в основном это хитрые структуры-юнионы и вызовы функций странными способами со странными аргументами :)
Я вас запомнила, если будет, чем поделиться - поделюсь в личку.

Date: 2017-04-01 08:02 pm (UTC)
From: [identity profile] kodt-rsdn.livejournal.com
Можно не в личку, а на http://rsdn.org
(Хотя и в личку тоже можно, но на форуме ответят многие эксперты и быстрее)
Edited Date: 2017-04-01 08:03 pm (UTC)

Profile

yorool_gui: (Default)
Michael Ilyin

April 2017

S M T W T F S
      1
2 345678
910 1112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 27th, 2017 02:44 am
Powered by Dreamwidth Studios