Warum ist das ein undefiniertes Verhalten?

Meine Antwort aufdiese Frage war diese Funktion:

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

Auf meinem Rechner mit VS2008-Compiler hat es jedoch perfekt funktioniertHier&nbsp;es funktioniert überhaupt nicht.

Hat jemand eine Idee, warum ich auf verschiedenen Compilern unterschiedliche Ergebnisse erhalte?unsigned&nbsp;Überlauf ist kein undefiniertes Verhalten.

Wichtige Notiz:&nbsp;Nach einigen Tests wurde bestätigt, dass es schneller ist als der Rest der Division um 15. (Allerdings nicht bei allen Compilern)