gcc / g ++内部错误(c ++模板化lambda)

时间:2015-01-28 21:02:57

标签: templates c++11 gcc lambda compiler-bug

我只是对我的程序进行了一些更改,突然g ++抱怨内部编译器错误。

然而,Clang编译没有任何问题,也没有发出任何警告,这表明任何奇怪的事情。

我将问题归结为:

#include <functional>

template<typename T>
class A{
    T someVar;
};

template<typename T>
class B {
        int x;

        std::function<A<double>(A<int>&)> someLambda = [&](A<int>& aInt){
            int xVar = x;
            A<double> aRet;
            return aRet;
        };
};

int main(int argc, char** argv){
    B<int> a;
    return 0;
}

我尝试了GCC 4.9.2和4.8.4,两者都失败了(内部编译器错误)。

我使用过的旗帜:

g ++ -std = c ++ 11 -O0 -g -Wall main.cpp -o gccBin

clang ++ -std = c ++ 11 -O0 -g -Wall main.cpp -o clangBin

main.cpp: In instantiation of 'struct B<int>::<lambda(class A<int>&)>':
main.cpp:10:7:   required from here
main.cpp:14:24: internal compiler error: in tsubst_copy, at cp/pt.c:12569
             int xVar = x;
                        ^
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
正如我所提到的,

Clang ++(3.5.1)编译没有问题。 我也试过多台机器,到处都是。

我忽略了某种错误吗?我在互联网上搜索了一下,我能找到的唯一类似的问题应该已经解决了(正如bugtracker所述)。

也许有人可以尝试在他们的机器上运行此代码或提供其他建议吗?

谢谢,

拉​​扎勒斯

1 个答案:

答案 0 :(得分:2)

这是编译器错误。请继续向GCC主人提交错误报告!