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

Templates gcc/g++;内部错误(c+;+;模板化lambda),templates,c++11,gcc,lambda,compiler-bug,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<

我刚刚对我的程序做了一些修改,突然间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;
}
#包括
模板
甲级{
T-someVar;
};
模板
B类{
int x;
std::函数someLambda=[&](A&aInt){
int xVar=x;
阿雷特;
返回aRet;
};
};
int main(int argc,字符**argv){
B a;
返回0;
}
我尝试了GCC4.9.2和4.8.4,但都失败了(内部编译器错误)

我使用的旗帜:

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

clangg++-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.
main.cpp:在“结构B::”的实例化中:
main.cpp:10:7:从这里开始需要
main.cpp:14:24:内部编译器错误:在tsubst_副本中,位于cp/pt.c:12569
int xVar=x;
^
libbacktrace找不到要打开的可执行文件
请提交完整的bug报告,
如果合适,使用预处理源。
有关说明,请参阅。
正如我提到的,Clang++(3.5.1)编译它时没有问题。 我还试过多台机器,到处都是一样的

是不是我忽略了什么错误?我在互联网上搜索了一下,我能找到的唯一类似问题现在应该已经解决了(正如bugtracker所说的)

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

谢谢,


Lazarus

这是一个编译器错误。去吧,向GCC的伙计们提交一份bug报告

如果GCC有内部编译器错误,那就是编译器错误,句号。这不是你的错。但是,可能有一个解决办法。如果我们删除未使用的
xVar
O,那么错误就会消失。O与lambda或callstack的大小有关的什么?请使用最新版本的编译器进行检查,如果问题仍然存在,请提交…感谢对编辑Mooing Duck的澄清。您的解决方法是什么?一个简单的工作示例如下所示:#包含模板类A{int x;std::function someLambda=[&](){x;};};int main(){A;}