Por que isso é um comportamento indefinido?

Minha resposta paraessa questão foi esta função:

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

Ele funcionou perfeitamente na minha máquina com o compilador VS2008, no entantoAqui não funciona de todo.

Alguém tem uma idéia, por que eu recebo resultados diferentes em compiladores diferentes?unsigned estouro não é um comportamento indefinido.

Nota importante: depois de algum teste, foi confirmado que é mais rápido do que levar o resto da divisão por 15. (No entanto, não em todos os compiladores)

questionAnswers(2)

yourAnswerToTheQuestion