所以我有一个应用程序,编译良好的Windows,Linux和一些unix的变种。我最近决定将它移植到OSX上,当我遇到困难时。C++标准库中的所有函数都需要外部链接吗?
我有一个模板,看起来像这样:
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函数静态内联。
如果您在严格标准模式下编译,您还将获得标准行为。 – 2010-08-27 21:08:07