プログラムにいくつかの変更を加えていたところ、突然 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) は問題なくコンパイルされます。また、どこでも同じ複数のマシンを試しました。
私が見落とした何らかのエラーはありますか?私はインターネットで少し検索しましたが、見つけた唯一の同様の問題は、今では修正されているはずです (バグトラッカーが述べているように)。
誰かが自分のマシンでこのコードを実行してみるか、他のアドバイスを与えることができますか?
ありがとうございました、
ラザロ