функции/метода (не функтора!) через каст к void*?
Это impl def емнип. Позикс гарантирует возможность этого каста, стандарт си/плюсов нет
1) конвертация указателей на объекты в void* входит в стандартные преобразования и (обычно) может применяться неявно (conv.ptr#2) 2) обратное преобразование из void* в указатель на объект требует явного static_cast (expr.static.cast#13) 3) конвертация указателя на функцию в указатель на объект это необязательная фича reinterpret_cast с implementation-defined поведением. гарантируется лишь, что если применить к указателю такое преобразование, а потом обратное, то значение не изменится (expr.reinterpret.cast#8) 4) указатели на нестатические члены класса это вообще не указатели (basic.types#basic.compound-3), и я не нахожу, чтобы стандарт давал возможность конвертировать их в void* или обратно
Все дело в том, что функция не объект... Или не совсем объект
насколько я понимаю, функции вообще не объекты: An object type is a (possibly cv-qualified) type that is not a function type, not a reference type, and not cv void.
Ну указатель на функцию в виде переменной - объект
Обсуждают сегодня