Here is a question that asks whether VC++ does consider it undefined, and here: Undefined behavior is closer than you think is a post that clearly shows that it is in fact undefined and the compiler/optimizer may mess up code in VS2015 no less.
What I haven't found so far is whether VC++ has any switch like -fwrapv of GCC to make the compiler/optimizer have signed overflow well defined. Is there any such option?
If you check here at Microsoft's Compiler Options Listed by Category there doesn't seem to be any such option.