供应商可以在标准库头文件中包含附加函数吗?

问题描述 投票:0回答:1
Microsoft 在

std::max()

 中有 
<utility>
,所以 
这个可以编译(Godbolt):

#include <utility> int main() { return std::max(2,3); }
GCC 在 

std::max()

 中没有 
<utility>
,因此 
它无法编译(Godbolt)clang(神箭)也没有。

CppReference

未将其列为 <utility>

 的一部分。它应该  位于 <algorithm>
 (CppReference)

是否允许库供应商(例如 Microsoft)向任意标头添加函数?

我看到的问题是代码的可移植性。这样,我的代码只能与 MSVC 一起使用,而不能与其他代码一起使用。更糟糕的是,我最终陷入了这种情况,因为我使用了 Visual Studio 的“优化包含图”功能,然后它决定

<utility>

 需要包含更少的代码行(或者无论他们的指标是优化包含)。

在标准中,我只在“标题

概要”一章(C++23 草案 N4928 中的第 27.4 章)中找到(搜索词

const T& max
)std::max() 函数。

c++ language-lawyer
1个回答
0
投票
是的,这是允许的。

[res.on.headers]


1 — C++ 标头可以包含其他 C++ 标头。 ...

3 — C 标准库头文件应仅包含其相应的 C++ 标准库头文件,如 [headers] 中所述。

© www.soinside.com 2019 - 2024. All rights reserved.