[..]Maybe PEM's should not be allowed to be overloaded with non-static member functions of the class? As in, the private void Foo::F(int) {} declaration would give a compiler error as it overloads a non-static member function of Foo. This would avoid confusion with programmers (and make teaching this more simple) as otherwise there'd be the need to explain why F(5) is resolving to F(double) rather than F(int), which is the better fitting match.