Возможно, название само по себе не понятно...
У меня есть функция f (предоставляемая некоторой библиотекой), которая принимает в качестве аргумента указатель функции подписи void g(int*), т.е.
void f(void (*g)(int*));
Однако я хотел бы использовать его, используя функцию g (которую я определил) с сигнатурой void g(const int*). Априори, я не вижу, как это может нарушить любую const-правильность, поскольку вся подпись f говорит, что g будет только когда-либо вызываться с (не const) int* (non - const), и действительно, я могу вызвать функцию void (const int*) с аргументом не const int*.
Но GCC жалуется и говорит:
expected 'void (*)(int *)', but argument is of type 'void (*)(const int *)'
Я не вижу, как эта жалоба может быть законной, так кто-нибудь знает, не ошибается ли мое понимание этого, или если есть способ обойти это?