Возможно, название само по себе не понятно...
У меня есть функция 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 *)'
Я не вижу, как эта жалоба может быть законной, так кто-нибудь знает, не ошибается ли мое понимание этого, или если есть способ обойти это?