Понял, что ничего не понял. 
Объясняю: наличие в коде 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).
Причем все остальные параметры, включая как простые, так и указатели на довольно стложные структуры - передаются правильно. 
Иакое впечатление, что компилятор оптимизируя создает какие-то свои представления о значениях параметра. Повторяя предыдущий параметр цикла.
Но самое смешное, что если код функции непосредвсвенно вписать ручками - все ОК.