Значение int (*) (int *) = 5 (или любое целочисленное значение)

Я не могу понять это:

int main() {
    int (*) (int *) = 5;
    return 0;
}

Вышеуказанное назначение компилируется с g ++ c ++ 11. я знаю этоint (*) (int *) указатель на функцию, которая принимает(int *) в качестве аргумента и возвращает int, но я не понимаю, как вы могли бы приравнять его к 5. Сначала я подумал, что это функция, которая постоянно возвращает 5 (из моего недавнего изучения F #, возможно, ха-ха), затем я подумал, кратко указатель на функцию указывает на ячейку памяти 5, но это, очевидно, не работает, равно как и шестнадцатеричные значения.

Думая, что это может быть потому, что функция возвращает целое число, и что присвоение целого числа в порядке (каким-то образом), я также попробовал это:

int * (*) (int *) = my_ptr

гдеmy_ptr имеет типint *того же типа, что и указатель второй функции, как в первом случае с типом int. Это не компилируется. Назначение 5 или любого значения int вместоmy_ptr, также не компилируется для этого указателя функции.

Итак, что означает назначение?

Обновление 1

У нас есть подтверждение, что это ошибка, как показано в лучшем ответе. Тем не менее, до сих пор не известно, что на самом делепроисходит к значению, которое вы присваиваете указателю функции, или что происходит с присваиванием. Любые (хорошие) объяснения по этому поводу будут очень благодарны! Пожалуйста, обратитесь к изменениям ниже для большей ясности в проблеме.

Редактировать 1

Я использую gcc версии 4.8.2 (в Ubuntu 4.8.2)

Редактировать 2

На самом деле, приравнивая его ко всему, работает на моем компиляторе. Даже приравнивая его к переменной std :: string или имени функции, которая возвращает double, работает.

Изменить 2.1

Интересно, что указатель функции на любую функцию, которая возвращает тип данных, который не является указателем, позволит компилировать его, например:

std::string (*) () = 5.6;

Но как только указатель на функцию возвращает функцию, она не компилируется, например, с

some_data_type ** (*) () = any_value;

Ответы на вопрос(0)

Ваш ответ на вопрос