Почему это неопределенное поведение?

Мой ответэтот вопрос была эта функция:

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

Он отлично работал на моей машине с компилятором VS2008, однакоВот это не работает вообще.

У кого-нибудь есть идея, почему я получаю разные результаты на разных компиляторах?unsigned переполнение не является неопределенным поведением.

Важная заметка: после некоторого теста было подтверждено, что это быстрее, чем брать остаток от деления на 15. (Однако не на всех компиляторах)

Ответы на вопрос(2)

Ваш ответ на вопрос