Преобразование указателя в функцию с многоточием

Рассмотрим следующая программа:

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

7
задан Björn Pollex 18 October 2011 в 13:50
поделиться