MSVC is mistakenly treating false as a null pointer constant. However, according to N4140, §4.10 [conv.ptr]/1 (emphasis mine):
A null pointer constant is an integer literal with value zero or a prvalue of type std::nullptr_t. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of object pointer or function pointer type.
The wording changed a bit from C++11, and you can find that discussion here. The verdict there was that it was an error in C++11 as well.
For visibility, TartanLlama provided the definition of "integer literal" below, according to [lex.icon]/1:
An integer literal is a sequence of digits that has no period or exponent part, with optional separating single quotes that are ignored when determining its value.
0can be a null pointer constant. This shouldn't compile indeed.