gcc 4.7.3 的一个 c++11 bug
Posted Terark-CTO-雷鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc 4.7.3 的一个 c++11 bug相关的知识,希望对你有一定的参考价值。
请关注我们的技术创业项目 Terark,领先的数据技术提供商
昨天一个朋友 checkout 了我的 febird 代码,编译时出现了一个诡异的错误。经过仔细勘察,他的 g++ 版本是 4.7.3,而我测试过的 g++4.7.2,g++4.8.2均无问题。
后来修改代码,解决了那个问题,但要还原那个bug时,很费了一番力气。以下是还原的那个 bug 的一段简单代码,不过可能不是最简单的。
#include <stdio.h>
struct A
int x = 10;
;
template<class>
struct B : A
static void foo(A* a)
// auto b = static_cast<B*>(a); // g++ 4.7.3 compile OK
auto* b = static_cast<B*>(a); // g++ 4.7.3 compile error
auto lamb = [&](A*)
printf("a.x=%d\\n", b->x);
;
lamb(a);
;
int main()
A a;
B<int>::foo(&a);
return 0;
g++4.7.3 出错的原因在于,将 b 的类型推导成了 B<int>*&,而引用不能绑定到 prvalue 上!关于什么事 prvalue,需要你去参考 C++ 标准。
以上是关于gcc 4.7.3 的一个 c++11 bug的主要内容,如果未能解决你的问题,请参考以下文章
使用gcc -std = c ++ 11时,为什么Cygwin中的某些系统函数未定义?