They certainly can. Calls for a pure virtual function can be made statically.
virtual void func() = 0;
//body for pure virtual function
class S : P
//static call to pure virtual function
//static call via object
@Cohen: What compiler compiles this program? If a compiler does, I would say it's not ISO C++ conformant. Basic problem is that non static functions take a hidden first parameter that has to be of the type of the class the method is defined in and that's the object you refer to by the "this" keyword.
In other words: apart from very likely being a compiler problem, calling a non-static method from a static method is a bad practice. Try to use a class P with fields and access them in the virtual method...
Apologies, ignore my answer then. Still a beginner myself and questions like this help me research new things, hence why I like to lurk around these forums😁
I have fixed the original answer I made so that it actually works, but I don't know whether it's any good at all.