所以我有一个可以在Windows,Linux和Unix的一些变体上很好编译的应用程序。我最近遇到麻烦时决定将其移植到OSX。

我有一个看起来像这样的模板:

template<int (&F)(int)>
int safe_ctype(unsigned char c) { return F(c); }

这个想法是防止给定0x7f以上的输入值时,符号扩展不会使某些实现崩溃。通常这样使用:
safe_ctype<std::isspace>(ch);

不幸的是,这在OSX上不起作用(使用gcc 4.2)。该错误与std::isspace没有外部链接有关,因此不适用于模板。事实证明,在OSX上,ctype.h header 具有所有功能(通过宏)标记为static inline

这是我的问题:

C++(在这种情况下,是从C继承的部分)标准库中的函数的任何相关标准是否允许其没有外部链接?

编辑:

我已经收到苹果的回音。显然,他们有一个宏来控制此行为。定义_DONT_USE_CTYPE_INLINE_可以防止ctype函数是静态内联的。

最佳答案

C++ 03§17.4.2.2/1说:



在C中也是如此:C99§7.1.2/6说:

关于c++ - 是否要求c++标准库中的所有功能都具有外部链接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3571771/

10-09 06:37