Разрешено ли брать адрес неопределенной функции? - PullRequest
6 голосов
/ 01 апреля 2020

Следующий код определяет всю программу. Соответствует ли стандарт этой программе (с последней версией)?

void foo();

int main()
{
    auto x = &foo;
    return 0;
}

Здесь - это удобное сокращение.

Этот код не имеет практического применения, я просто любопытно.

1 Ответ

10 голосов
/ 01 апреля 2020

Каждая функция, которая используется odr, требует определения (диагностика c не требуется). Получение адреса функции - это использование odr, поэтому эта программа демонстрирует неопределенное поведение. При оптимизации оптимизируется адрес адреса, поэтому в нем нет ошибки компоновщика, но он не требуется для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...