Я не прав о следующем?
Стандарты на С++ говорят, что преобразование между указателем на функцию и указателем на объект (и обратно) условно поддерживается семантикой, определяемой реализацией, в то время как все стандарты C говорят, что это запрещено во всех случаях, правильно? /p >
void foo() {}
int main(void)
{
void (*fp)() = foo;
void* ptr = (void*)fp;
return 0;
}
ISO/IEC 14882: 2011
5.2.10 Реинтерпретировать литье [expr.reinterpret.cast]
8 Преобразование указателя функции в тип указателя объекта или наоборот versa условно поддерживается. Значение такого преобразования определяется реализацией, за исключением того, что если реализация поддерживает преобразования в обоих направлениях, преобразование значения одного типа в другой тип и обратно, возможно с различной cvqualification, должен дать исходное значение указателя.
Я не могу найти ничего об этом в стандарте C прямо сейчас...