In C++, virtual and static don't mix.
virtual
= concrete operation depends on the type of an object.static
= you don't need an object.
It is certainly possible to imagine such a thing, however. If C++ had something like meta types, allowing you to treat regular types as objects, then it would not be such a strange idea anymore.
Pseudo-code (using an imaginary syntax):
void f(Class base_class)
{
base_class.StaticMethod();
}
struct Base
{
virtual static StaticMethod(); // impossible in C++
};
struct Derived : Base
{
virtual static StaticMethod(); // impossible in C++
};
f(Base); // impossible in C++
f(Derived); // impossible in C++
The desire to create something like static virtual functions is sometimes a symptom for the real need (which C++ cannot fulfill out of the box): treating types as objects.