From the MSDN:
Ty atomic<Ty>::operator++(int) volatile _NOEXCEPT; Ty atomic<Ty>::operator++(int) _NOEXCEPT; Ty atomic<Ty>::operator++() volatile _NOEXCEPT; Ty atomic<Ty>::operator++() _NOEXCEPT;
The first two operators return the incremented value; the last two operators return the value before the increment.
But, C++11 documentation defines returns from this operators as
The value of the atomic variable after the modification. Formally, the result of incrementing/decrementing the value immediately preceding the effects of this function in the modification order of *this.
Why MSVC++ compiler use non standard definitions ?