Correct me if I am wrong. Is NVHNode a typo? Should it be BVHNode?
Also, should the line
NVHNode* second = (hit2.t <= hit1.t) ? child2 : child1;
becomes NVHNode* sec <= hit2.t) ? child2 : child1;
Since otherwise, I think first and second are pointing to the same node and it's a bit confusing to me.