G CC пропускает свою лямбда-реализацию в программу пользователя? - PullRequest
1 голос
/ 03 августа 2020

Как возможно, что следующий код успешно скомпилирован G CC версией [6..10]?

int main(int argc, char *argv[])
{
    auto const answer = 42;
    auto lambda = [&answer] {};
    auto *p = &(lambda.__answer);

    return p != &answer; // return 0 (success) if they are the same
}

Передает ли G CC свое внутреннее представление лямбда-выражений пользователю программа?

Godbolt

1 Ответ

3 голосов
/ 03 августа 2020

[lex.name] (3) Кроме того, некоторые идентификаторы зарезервированы для использования реализациями C ++, и не должен использоваться иначе; не требуется c . (3.1) Каждый идентификатор, содержащий двойное подчеркивание __ или начинающийся с подчеркивания, за которым следует заглавная буква, зарезервирован для реализации для любого использования.

[intro] Если программа содержит нарушение правила, для которого не требуется диагностика c, этот документ не устанавливает требования к реализациям этой программы.

[defns.undefined] неопределенное поведение : поведение, к которому этот документ не предъявляет никаких требований.

Таким образом, поведение программы не определено.

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