- 1
- 2
- 3
- 4
- 5
- 6
- 7
int main()
try
{
}
catch (...)
{
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+34
int main()
try
{
}
catch (...)
{
}
http://ideone.com/luh8p
а еще можно запихать try перед ':' в списке инициализации членов в конструкторе: и да, кончай уже со своим using namespace std;
Я бы с удовольствием кончил, но ideone.com сам свой шаблон/template для С++ имеет.
и правда есть
На нем у gcc до 4.7 взрывается мозг и оно начинает взывать к своим авторам.
нормальный компилятор должен внутреннюю структуру с ее методами парсить почти независимо от контекста внешней функции (тут только typedef/enum снаружи будут влиять), и потому case внутри метода, не привязанный к никакому switch, не должен его смутить - должна быть обычная синтаксическая ошибка
P.S. Когда нашел этот баг - хотел отправить багрепорт, но передумал, найдя у них в трекере пару подобных примеров и замечание что в 4.7 баг исправлен. Так что не я один "пишущий вот такой вот код".
в 3.х та же internal compiler error
кстати, clang то уже production ready?
Потому что с таким определением можно и не такой чудесный код придумать, но ни одной нейронной сети не хватит на то, чтобы предвидеть все варианты. Совсем даже не факт, что код выше не правильный. Следуя из описания switch'a в нем ничего такого нет.
указывается, что с помощью case должно быть помечено statement
а мы тут попадаем в объявление типа
поэтому и вот в таком случае тоже будет ошибка компиляции (помечаем не стейтмент): а в таком - все нормально, хоть и залезли внутрь блока (синтетический пример, за такой код я бы убивал)
было и смешивание с for-ами/if-ами, было и переход в место после декларации автоматических переменных
поэтому синтаксическая проблема только там, где "case 1:"