C++20 模块 TS:还需要函数声明吗?

C++20 modules TS: still need function declaration?

我希望对那些尝试过 C++20 模块的人提出一个快速的小问题

根据 TS,这段代码应该在 C++20 中编译吗?

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

例如,在 C++11 中它不会编译,因为 f1() 没有 "know" 关于 f2(),f2() 必须在使用前声明。

但也许在 C++20 中这个要求会在模块中被取消?

如果第一个代码片段没有编译,这个会编译吗

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

因为f2()会从BMI看出来?

虽然模块确实改变了很多关于名称查找的事情(我知道的最新论文是 P1103R1),但模块不会改变 C++ 的基础 属性,即必须在名称之前声明名称使用(对诸如依赖的不合格调用之类的事物求模 - 这只会延迟查找,但它仍然必须实际发生)。

这个:

void f1() { f2(); }
export void f2() { ... }
如果之前没有声明 f2 或者它不是从某处导入的,

仍然会是一个编译错误。你必须写:

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