cygwin 在 g++4.9.2 中支持 C++11
cygwin support for C++11 in g++4.9.2
我正在尝试在 cygwin 下的 Windows 7 上测试一些 C++11 代码,并且遇到以 C++11 开头定义的函数的编译错误,例如 std::log2
和 std::round
。我正在使用 gcc 4.9.2 使用 g++ -std=c++11 test.cpp
进行编译。这是一些无法编译的最小示例:
#include <cmath>
#include <iostream>
int main()
{
auto x = std::log2(10);
std::cout << x << std::endl;
}
错误:
g++ -std=c++11 test.cpp
test.cpp: In function ‘int main()’:
test.cpp:5:11: error: ‘log2’ is not a member of ‘std’
auto x = std::log2(10);
^
test.cpp:5:11: note: suggested alternative:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/cmath:44:0,
from test.cpp:1:
/usr/include/math.h:305:15: note: ‘log2’
extern double log2 _PARAMS((double));
这是 cygwin 的 g++ 移植中的已知错误吗?上面的代码适用于任何支持 C++11 的 Linux/UNIX 风格。
这个问题似乎 bug 与 cygwin 实现有关,感谢 Shafik Yaghmour 指出。
此问题现已通过 <cmath>
的补丁解决,同样在上面提供的 link 中。
我正在尝试在 cygwin 下的 Windows 7 上测试一些 C++11 代码,并且遇到以 C++11 开头定义的函数的编译错误,例如 std::log2
和 std::round
。我正在使用 gcc 4.9.2 使用 g++ -std=c++11 test.cpp
进行编译。这是一些无法编译的最小示例:
#include <cmath>
#include <iostream>
int main()
{
auto x = std::log2(10);
std::cout << x << std::endl;
}
错误:
g++ -std=c++11 test.cpp
test.cpp: In function ‘int main()’:
test.cpp:5:11: error: ‘log2’ is not a member of ‘std’
auto x = std::log2(10);
^
test.cpp:5:11: note: suggested alternative:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/cmath:44:0,
from test.cpp:1:
/usr/include/math.h:305:15: note: ‘log2’
extern double log2 _PARAMS((double));
这是 cygwin 的 g++ 移植中的已知错误吗?上面的代码适用于任何支持 C++11 的 Linux/UNIX 风格。
这个问题似乎 bug 与 cygwin 实现有关,感谢 Shafik Yaghmour 指出。
此问题现已通过 <cmath>
的补丁解决,同样在上面提供的 link 中。