http://blogs.msdn.com/b/oldnewthing/archive/2015/05/25/10616865.aspx
Вот такую шутку опубликовали на msdn. Суть в том, что это работает без каких-либо там расширений VC++, а за счет ~
- битового не, и унарного минуса.
А теперь у меня вопрос: всегда ли эта штука будет выдавать то, что нужно? Результат битового отрицания в этой ситуации как-нибудь зависит от того, little endian у нас или big endian, или от чего-нибудь еще? А что если число уже равно std::numeric_limits<соответствующий_типа>::min()
или std::numeric_limits<соответствующий_типа>::max()
? Там какое-нибудь переполнение или еще что-то будет?