所以我有一个可以在 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
标头具有标记的所有功能(通过宏)static inline
。
这是我的问题:
任何相关标准是否允许 C++ 中的函数(在这种情况下是从 C 继承的部分)标准库中没有外部链接?
编辑:
我收到了苹果的回复。显然他们有一个宏来控制这种行为。定义_DONT_USE_CTYPE_INLINE_
防止 ctype 函数是静态内联的。