я как раз вносил несколько изменений в свою программу, когда вдруг 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) компилирует его без проблем. Я также пробовал несколько машин, везде одно и то же.
Есть ли какая-то ошибка, которую я упустил? Я немного поискал в Интернете, и единственные похожие проблемы, которые я смог найти, уже должны были быть исправлены (как утверждает багтрекер).
Может кто-нибудь попробовать запустить этот код на своей машине или дать другой совет?
Спасибо,
Лазарь
xVar
O.o Что-то связанное с размером лямбды или стека вызовов или что-то в этом роде? - person Mooing Duck   schedule 29.01.2015x;
, то это тоже сработает. Комбинация обоих, кажется, приводит к проблемам. - person Ralph Tandetzky   schedule 29.01.2015