Replaced my return function with the following:
auto result = u0 >= 0 && u1 <= 1 && u0 <= u1 ? intersect_type_t::intersect : intersect_type_t::disjoint;
if(normal != nullptr && result == intersect_type_t::intersect)
{
auto normal_value_ptr = glm::value_ptr(*normal);
for(size_t i = 0; i < 3; ++i)
{
if(u_0[i] == u0)
{
normal_value_ptr[i] = v[i] > 0 ? 1.f : -1.f;
break;
}
}
}
return result;