- 1
- 2
- 3
- 4
- 5
- 6
- 7
int main()
try
{
}
catch (...)
{
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+34
int main()
try
{
}
catch (...)
{
}
http://ideone.com/luh8p
LispGovno 24.09.2012 13:44 # +2
defecate-plusplus 24.09.2012 13:51 # +7
а еще можно запихать try перед ':' в списке инициализации членов в конструкторе: и да, кончай уже со своим using namespace std;
LispGovno 24.09.2012 15:02 # +1
Я бы с удовольствием кончил, но ideone.com сам свой шаблон/template для С++ имеет.
defecate-plusplus 24.09.2012 15:08 # +2
и правда есть
bormand 24.09.2012 17:46 # +1
roman-kashitsyn 24.09.2012 17:50 # +6
LispGovno 24.09.2012 18:30 # 0
TarasB 27.09.2012 15:25 # +2
TarasB 27.09.2012 15:24 # 0
bormand 24.09.2012 17:53 # +12
На нем у gcc до 4.7 взрывается мозг и оно начинает взывать к своим авторам.
psycho-coder 24.09.2012 20:48 # +2
wvxvw 25.09.2012 01:03 # 0
defecate-plusplus 25.09.2012 04:54 # +2
нормальный компилятор должен внутреннюю структуру с ее методами парсить почти независимо от контекста внешней функции (тут только typedef/enum снаружи будут влиять), и потому case внутри метода, не привязанный к никакому switch, не должен его смутить - должна быть обычная синтаксическая ошибка
bormand 25.09.2012 06:03 # +2
P.S. Когда нашел этот баг - хотел отправить багрепорт, но передумал, найдя у них в трекере пару подобных примеров и замечание что в 4.7 баг исправлен. Так что не я один "пишущий вот такой вот код".
defecate-plusplus 25.09.2012 06:48 # +2
в 3.х та же internal compiler error
кстати, clang то уже production ready?
TarasB 27.09.2012 15:27 # +2
wvxvw 25.09.2012 10:23 # 0
Потому что с таким определением можно и не такой чудесный код придумать, но ни одной нейронной сети не хватит на то, чтобы предвидеть все варианты. Совсем даже не факт, что код выше не правильный. Следуя из описания switch'a в нем ничего такого нет.
defecate-plusplus 25.09.2012 10:52 # 0
указывается, что с помощью case должно быть помечено statement
а мы тут попадаем в объявление типа
поэтому и вот в таком случае тоже будет ошибка компиляции (помечаем не стейтмент): а в таком - все нормально, хоть и залезли внутрь блока (синтетический пример, за такой код я бы убивал)
bormand 25.09.2012 11:40 # 0
defecate-plusplus 25.09.2012 11:48 # 0
было и смешивание с for-ами/if-ами, было и переход в место после декларации автоматических переменных
LispGovno 25.09.2012 12:05 # 0
TarasB 27.09.2012 15:28 # 0
defecate-plusplus 27.09.2012 15:54 # 0
wvxvw 27.09.2012 13:24 # 0
defecate-plusplus 27.09.2012 14:16 # 0
поэтому синтаксическая проблема только там, где "case 1:"
wvxvw 27.09.2012 16:44 # 0
TarasB 27.09.2012 15:26 # +2
suc-daniil 27.09.2012 12:03 # +5