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