Because their signatures are the same in fact.
The type of each function parameter in the parameter list is determined according to the following rules:
...
4) Top-level cv-qualifiers are dropped from the parameter type (This adjustment only affects the function type, but doesn't modify the property of the parameter: int f(const int p, decltype(p)*);
and int f(int, const int*);
declare the same function)
That means, void func(int a)
and void func(const int a)
are considered as the same function type; then the overriding is valid.