Tem*_*Rex 42 c++ header clang c++11 c++14
我有一个项目正确编译并在g ++ 4.8.1下运行,并在c ++ 11模式下运行> = 3.3.但是,当我切换到实验-std=c++1y
模式时,<cstdio>
通过Boost.Test间接包含的标题中的clang 3.3(但不是g ++)扼流圈(所以我自己不能轻易改变它)
// /usr/include/c++/4.8/cstdio
#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
// ...
#undef gets
// ...
namespace std
{
// ...
using ::gets; // <-- error with clang++ -std=c++1y
// ...
}
Run Code Online (Sandbox Code Playgroud)
带有以下错误消息:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/cstdio:119:11:错误:全球没有名为'gets'的成员命名空间
在有关如何设置现代C++环境的本教程中,max_align_t
遇到了类似的查找问题.建议使用sed脚本用#ifdef __clang__
宏包围未知符号,但这似乎是一种脆弱的方法.
安装程序:普通的64位Linux Mint 15
g ++(Ubuntu 4.8.1-2ubuntu1~13.04)4.8.1
Ubuntu clang版本3.3-3~raring1(branches/release_33)(基于LLVM 3.3)
问题:
__clang__
在所讨论的代码附近没有任何宏,并且c ++ 11模式中的clang完全没有问题.std
命名空间)?Ben*_*igt 23
gets
联机帮助页中的此注释看起来很相关:
ISO C11从C语言中删除了gets()的规范,从版本2.16开始,如果
_ISOC11_SOURCE
定义了功能测试宏,glibc头文件不会公开函数声明.
可能应该是
#if !_ISOC11_SOURCE
using ::gets;
#endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6741 次 |
最近记录: |