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

Ale*_*k86 2 c++ module function-declaration c++20

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

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

void f1() { f2(); }
void f2() { ... }
Run Code Online (Sandbox Code Playgroud)

例如,在C++ 11中它不会编译,因为f1()不"知道"f2(),必须在使用前声明f2().

但也许在C++ 20中,这个要求将在模块中消除?

如果没有编译第一个代码片段,那么这个代码片段是否会编译

void f1() { f2(); }
export void f2() { ... }
Run Code Online (Sandbox Code Playgroud)

因为从BMI可以看到f2()?

Bar*_*rry 6

模块还没有在C++ 20中.他们可能会在那里结束,但他们还没有.

这就是说,虽然模块确实改变了很多关于名称查找的东西(我知道最新的论文是P1103R1),但模块不会改变C++的基本属性,这些属性必须在使用之前声明(模仿依赖的非限定调用之类的函数 -只是延迟查找,但它仍然必须实际发生).

这个:

void f1() { f2(); }
export void f2() { ... }
Run Code Online (Sandbox Code Playgroud)

如果没有先前声明f2或从某处未导入,则仍将是编译错误.你必须写:

export void f2() { ... }
void f1() { f2(); }
Run Code Online (Sandbox Code Playgroud)