Подтвердить что ты не робот

Является ли Boost использующим законный синтаксис директив предварительной обработки С++?

Мой (относительно старый) компилятор С++ задохнулся на этот файл в Boost, который начинается с:

# /* Copyright (C) 2001
#  * Housemarque Oy
#  * http://www.housemarque.com
#  *
#  * Distributed under the Boost Software License, Version 1.0. (See
#  * accompanying file LICENSE_1_0.txt or copy at
#  * http://www.boost.org/LICENSE_1_0.txt)
#  */
#

Это действительно легальный С++? Какое правило синтаксиса токенов препроцессора?

4b9b3361

Ответ 1

Да, строка, содержащая только # и пробел, явно разрешена стандартом §16 [cpp]:

Контроль линии:
# include pp-tokens new-line
# define идентификатор замены-списка new-line
# define идентификатор lparen identifier-list opt) new-line для замены-списка
# define идентификатор lparen ... ) new-line для замены-списка
# define идентификатор lparen identifier-list , ... ) замена-list new-line
# undef идентификатор new-line
# line pp-tokens new-line
# error pp-tokens opt new-line
# pragma pp-tokens opt new-line
# новая строка

Обратите внимание, что комментарии заменяются пробелами на этапе 3 перевода, то есть перед препроцессором.