Рассмотрим следующую программу:
#include <iostream>
typedef void (*fptr)(...);
void foo(fptr func) {
(*func)(12);
}
void bar(int x) {
std::cout << "bar : " << x << std::endl;
}
int main() {
foo(fptr(bar));
}
Это компилирует, запускает и печатает bar : 12
хотя бы на одном компиляторе :) Я обнаружил это в каком-то устаревшем коде, который я должен поддерживать, и мне интересно, безопасно ли это определено? *
bar
не соответствует типу fptr
, поэтому единственный способ заставить это работать - использовать небезопасное приведение. Я предполагаю, что это зависит от того, как многогранник - magic работает внутри, так это определено каким-то образом?