I have never read C++ before so I hope you forgive anything that would be obvious to someone who knows the language.
I can see you changed from slice sampling to multinomial sampling in 05dcaa7. And (some of? all of?) the variable names match the paper e.g. z_minus I assume matches $z_-$. That is very helpful :)
And I have found the check for the u-turn in
// Break when NUTS criterion is no longer satisfied
rho += rho_subtree;
if (!compute_criterion(p_sharp_minus, p_sharp_plus, rho))
So I think I can see what is going on. Thanks very much :)
Anything else I should look at or be aware of?