Рассмотрим следующая программа:
#include
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
, поэтому единственный способ заставить это работать - использовать небезопасное приведение. Я предполагаю, что это зависит от того, как магия многоточия- работает внутри, так это каким-то образом определено?