C ++ 20 модулей TS: все еще нужно объявление функции? - PullRequest
0 голосов
/ 14 ноября 2018

Надеюсь, небольшой вопрос для тех, кто попробовал модули C ++ 20

Согласно TS, должен ли этот код компилироваться в C ++ 20?

void f1() { f2(); }
void f2() { ... }

Например,в C ++ 11 он не будет компилироваться, потому что f1 () не «знает» о f2 (), f2 () должен быть объявлен перед использованием.

Но, возможно, в C ++ 20 этотребование будет исключено в модулях?

Если первый фрагмент кода не скомпилирован, будет ли этот компилироваться

void f1() { f2(); }
export void f2() { ... }

, поскольку f2 () будет виден из BMI?

1 Ответ

0 голосов
/ 15 ноября 2018

В то время как Модули многое меняют в поиске имен (последняя известная мне статья - P1103R1 ), Модули не изменят фундаментальное свойство C ++, которое имена должны быть объявлены перед использованием (вещи по модулю) как зависимые неквалифицированные вызовы - которые просто задерживают поиск, но это все же должно произойти).

Это:

void f1() { f2(); }
export void f2() { ... }

все равно будет ошибкой компиляции, если нет предыдущего объявления f2 или оно не было импортировано откуда-либо. Вам нужно будет написать:

export void f2() { ... }
void f1() { f2(); }
...