Понял, что ничего не понял.
Объясняю: наличие в коде UB означает, что проверка, как он работает, имеет очень мало смысла. Он может стабильно делать одно и то же, и кардинально поменять поведение при смене версии компилятора, машины, или изменении порядка объявления функций в каком-то вообще непонятном месте.
Ничего вы не купировали. Вы просто "спугнули" неопределенное поведение, скорее всего временно.
И чего делать?
Если не принимать во внимание радикальное решение: просто выкинуть позаимствованный из сети класс BigInteger.
Собственно основной алгорим (даже серия алгоритмов) работал и работает правильно. Плюс начальная простая визуализация процесса.
Однако захотелось построить более внятную математическую модель с более детальной визуализацией. И все как-то поехало.
Не принципиально, поначалу.
А теперь вот даже не могу обмануть компилятор в простой передаче (int) параметра.
Код:
float a = 0;
int st =0; while(st++<N)a+=tree(...,.., st,...);
inline int tree(...,.., int st,...){
cout << st <<endl;
a code;
}
То есть перед выполнением inline функции tree() значение st одно, а сразу же перед певым оператором внутри функции другое ( согласно cout << st).
Причем все остальные параметры, включая как простые, так и указатели на довольно стложные структуры - передаются правильно.
Иакое впечатление, что компилятор оптимизируя создает какие-то свои представления о значениях параметра. Повторяя предыдущий параметр цикла.
Но самое смешное, что если код функции непосредвсвенно вписать ручками - все ОК.