Когда определение экспортируемой функции доступно импортирующему ЕП?C++

Программы на C++. Форум разработчиков
Anonymous
Когда определение экспортируемой функции доступно импортирующему ЕП?

Сообщение Anonymous »

Рассмотрим следующую единицу перевода:

Код: Выделить всё

export module Example;

export inline void fn1();
export void fn2();
export void fn3();

void fn1() {}
void fn2() {}

module :private;

void fn3() {}
Во-первых, я понимаю, что fn1() работает как «традиционная» встроенная функция в заголовочном файле — в частности, ее определение доступно для встраивания при импорте TU.
Во-вторых, из примера cppreference я понял, что, поскольку оно находится во фрагменте частного модуля, определение fn3() определенно не доступно для импорта TU (и поэтому я могу изменить его, не затрагивая ABI).
Мой вопрос касается fn2(), который определен в модуле интерфейса модуля, но не помечен ключевым словом inline:
  • Может ли импортирующая единица перевода видеть определение fn2()?

    Если да, то в чем разница между f1() и f2()?
  • Если нет, то в чем разница между f2() и f3()?


Подробнее здесь: https://stackoverflow.com/questions/798 ... porting-tu

Вернуться в «C++»