Удивительно, но следующий код хорошо компилируется как в g cc, так и в clang независимо от того, какой символ перед именем функции используется: *
, &
или ничего. Допускает ли стандарт какой-либо из них? Какой способ хранения указателей на функции является предпочтительным?
#include <stdio.h>
typedef int foo(int a);
template <typename X>
int g(int y) {
return y * sizeof(X);
}
int main() {
foo* xxx;
// 1. what is correct according to standard?
// 2. why they all work?
xxx = *g<float>;
xxx = &g<float>;
xxx = g<float>;
printf("ok %d\n", xxx(5));
}