¿Por qué es este un comportamiento indefinido?

Mi respuesta aesta pregunta fue esta función:

inline bool divisible15(unsigned int x) 
{
    //286331153 = (2^32 - 1) / 15
    //4008636143 = (2^32) - 286331153
    return x * 4008636143 <= 286331153;
}

Funcionó perfectamente en mi máquina con el compilador VS2008, sin embargoaquí no funciona en absoluto

¿Alguien tiene una idea, por qué tengo diferentes resultados en diferentes compiladores?unsigned desbordamiento no es un comportamiento indefinido.

Nota IMPORTANTE: después de algunas pruebas se confirmó que es más rápido que tomar el resto de la división por 15. (Sin embargo, no en todos los compiladores)

Respuestas a la pregunta(2)

Su respuesta a la pregunta