А зачем это? Приводи указатель на функцию к void*, этого достаточно для хранения.
Но даже это лишнее, потому что ты не можешь вызвать функцию с одной сигнатурой через другую сигнатуру, то есть просто сигнатуру надо хранить ту же что у оригинальной функции.
Иначе ты не сможешь эту функцию вызвать.
Так что ub там или нет - я не знаю, но так просто нет смысла делать, поскольку ты функцию не вызовишь .
Именно поэтому так никто и не делает.
- Приводи указатель на функцию к void*, этого достаточно для хранения.
Я так и пытаюсь делать, но похоже что это запрещено стандартом:
https://godbolt.org/z/nG3Moq- А зачем это?
Экспериментирую. Хочу получить что-то вроде полностью безтипового
function_view
. Который превращал бы функции
A -> B
в функции
std::any -> std::any
. Вот пример (который не компилируется):
https://godbolt.org/z/16sz5Y- Просто сигнатуру надо хранить ту же что у оригинальной функции
Моя идея - хранить указатель на шаблонный "инвоукер" для каждой сигнатуры функции, который сам будет кастить перед вызовом. По аналогии с некоторыми реализациями
std::any