Because that's what the standard says:
9.4.1 Static member functions [class.static.mfct]
2) [ Note: A static member function does not have a this pointer (9.3.2). —end note ] A static
member
function shall not be virtual
. There shall not be a static
and a non-static
member function with the
same name and the same parameter types (13.1). A static member function shall not be declared const
,
volatile
, or const volatile
. (emphasis mine)
The reason for this is that a const
(or volatile
or virtual
) static
method wouldn't make sense (in the traditional sense, see below). For example, const
implies you can't modify the object's members, but in the case of statics, there's no object to talk about.
You could argue that a const
static
could apply to other static
members, but this option was regarded as pointless.