I suppose it's implementation-dependant as to whether this is actually checked. I suppose it's a tradeoff on whether you fail to link if you change the protection but "handle" overloading based on protection! I recall at least one compiler that checked, but it may be because it was more aggressive at optimizing and rearranging things.
For a virtual function, re-ordering the definitions will indeed change things on any known compiler.