"Bell" <3057@users.rsdn.ru> wrote in message news:1822075@news.rsdn.ru... > Здравствуйте, rg45, Вы писали: > > > R>Да тут я не увидел сразу, что здесь факториал то вычисляется. А для факториала уже при аргументе 13 происходит переполнение при вычислении 32-битного результата. Так что ошибка здесь связана не с глубиной заныра а с переполнением при вычислении константы времени компиляции. > > Замена умножения на сложение ситуацию не меняет: > >
R>Да тут я не увидел сразу, что здесь факториал то вычисляется. А для факториала уже при аргументе 13 происходит переполнение при вычислении 32-битного результата. Так что ошибка здесь связана не с глубиной заныра а с переполнением при вычислении константы времени компиляции.
Для проверки кода на валидность лучше Комо нет, это понятно, но тут ведь существенное отличие есть: выполнение скомпилированного кода на виртуальной машине.
> Результаты компиляции и запуска
> ANSI C++ Front-end Compiler & Virtual Machine, Version 3.0.
> Copyright (c) 1998-2003, Interstron, Ltd.
>
> *** C++ FrontEnd
> D:\soft\compiler\tmp\test.cpp.4 (1, 1): error 0332: Internal program error
> Excption:Unknown
> unknown exception!
Ну, я думаю, онлайновому компилеру можно простить, что 1000 для него силишком большое количество рекурентных инстанцирований.
При замене 1000 на 10 отрабатывает нормально. Хотя при 15 уже слетает
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, rg45, Вы писали:
R>Ну, я думаю, онлайновому компилеру можно простить, что 1000 для него силишком большое количество рекурентных инстанцирований. R>При замене 1000 на 10 отрабатывает нормально. Хотя при 15 уже слетает
Всё же хотелось бы получить адекватное сообщение об ошибке.
> Ну, я думаю, онлайновому компилеру можно простить, что 1000 для него силишком большое количество рекурентных инстанцирований. > При замене 1000 на 10 отрабатывает нормально. Хотя при 15 уже слетает
Для Комо 1000 не проблема. Больше того, там где-то опция есть, управляющая глубиной заныра.
"Кодт" <4783@users.rsdn.ru> wrote in message news:1821987@news.rsdn.ru... > > Ну, я думаю, онлайновому компилеру можно простить, что 1000 для него силишком большое количество рекурентных инстанцирований. > > При замене 1000 на 10 отрабатывает нормально. Хотя при 15 уже слетает > > Для Комо 1000 не проблема. Больше того, там где-то опция есть, управляющая глубиной заныра.
Да тут я не увидел сразу, что здесь факториал то вычисляется. А для факториала уже при аргументе 13 происходит переполнение при вычислении 32-битного результата. Так что ошибка здесь связана не с глубиной заныра а с переполнением при вычислении константы времени компиляции.
Posted via RSDN NNTP Server 2.0
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, dupamid, Вы писали:
D>Здравствуйте, Pavel Chikulaev, Вы писали:
PC>>Здравствуйте, Шахтер, Вы писали:
Ш>>>
Ш>>>Результаты компиляции и запуска
Ш>>>ANSI C++ Front-end Compiler & Virtual Machine, Version 3.0.
Ш>>>Copyright (c) 1998-2003, Interstron, Ltd.
PC>> PC>>Они даже не знают, что ANSI не авторитет в мире C++
D>В смысле? ISO и ANSI стандарты С++ фактически один и тот же стандарт, у него только обложка разная.
Я знаю Ну просто странно писать американский стандарт (они явно не попадут на тот рынок), когда есть международный.
Впрочем Borland свой компилятор также называла, а Microsoft c приходом Саттера только ISO/IEC.
#include <iostream>
template <unsigned int I>
class X
{
public:
static unsigned int const res = X<I + 1>::res + 1;
};
template <>
class X<15>
{
public:
static unsigned int const res = X<0>::res + 1;
};
int main()
{
std::cout << X<0>::res;
}
ANSI C++ Front-end Compiler & Virtual Machine, Version 3.0.
Copyright (c) 1998-2003, Interstron, Ltd.
*** C++ FrontEnd
D:\soft\compiler\tmp\test.cpp.4 (1, 1): error 0332: Internal program error
Excption:Unknown
unknown exception!
спасибо. тебе и Bell.
этот отвалился на глубине 36, EDG тоже.
VS не понимал static const int константы, но с рекурсией 100 справился.
такие вот наблюдения
Здравствуйте, Pavel Chikulaev, Вы писали:
PC>>>Они даже не знают, что ANSI не авторитет в мире C++ D>>В смысле? ISO и ANSI стандарты С++ фактически один и тот же стандарт, у него только обложка разная. PC>Я знаю Ну просто странно писать американский стандарт (они явно не попадут на тот рынок), когда есть международный. PC>Впрочем Borland свой компилятор также называла, а Microsoft c приходом Саттера только ISO/IEC.
Имя ANSI для более или менее строго соответствия Стандарту общепринятая практика. Например словосочетания ANSI alias, strict ANSI complain, etc. По поводу MS вот ссылочка http://msdn2.microsoft.com/en-us/library/0k0w269d(VS.80).aspx на ключ /Za для Whidbey, там это тоже называется ANSI:
/Za flags language constructs not compatible with either ANSI C++ or ANSI C as errors.
NB>спасибо. тебе и Bell. NB>этот отвалился на глубине 36, EDG тоже. NB>VS не понимал static const int константы, но с рекурсией 100 справился. NB>такие вот наблюдения
А что ты называешь EDG? Просто этот дигнус использует фронт энд ЕДГ, версии 3.04 или как там они их называют
Of course, the code must be complete enough to compile and link.
Здравствуйте, strcpy, Вы писали:
S>Здравствуйте, night beast, Вы писали:
NB>>в fido7.su.c-cpp ссылка проскочила NB>>http://www.interstron.ru/text.asp?id=2102
S>Я у него в корневом каталоге файлы делал. И они там сохранялись Весь диск заполнять не стал, пожалел.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
NB>>спасибо. тебе и Bell. NB>>этот отвалился на глубине 36, EDG тоже. NB>>VS не понимал static const int константы, но с рекурсией 100 справился. NB>>такие вот наблюдения
L_L>А что ты называешь EDG? Просто этот дигнус использует фронт энд ЕДГ, версии 3.04 или как там они их называют
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, Lorenzo_LAMAS, Вы писали:
NB>>>спасибо. тебе и Bell. NB>>>этот отвалился на глубине 36, EDG тоже. NB>>>VS не понимал static const int константы, но с рекурсией 100 справился. NB>>>такие вот наблюдения
L_L>>А что ты называешь EDG? Просто этот дигнус использует фронт энд ЕДГ, версии 3.04 или как там они их называют
NB>тот который DinkumExam (EDG). NB>версию не написали.
Версию едг в онлайн компиляторах проверять можно так :
template<int>class A{};
int main()
{
A<__EDG_VERSION__>() = 0;
}
правда, это при условии, что определен __EDG_VERSION__ и в сообщении об ошибке будет сказано что- то вроде
no operator "=" matches these operands
operand types are: A<300> = int
, как я понимаю, не всегда срабатывает, даже если действительно используется фронт-энд ЕДГ.
Итак, у Димкуна довольно-таки старая версия ЕДГ.
Of course, the code must be complete enough to compile and link.