0

プログラムにいくつかの変更を加えていたところ、突然 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) は問題なくコンパイルされます。また、どこでも同じ複数のマシンを試しました。

私が見落とした何らかのエラーはありますか?私はインターネットで少し検索しましたが、見つけた唯一の同様の問題は、今では修正されているはずです (バグトラッカーが述べているように)。

誰かが自分のマシンでこのコードを実行してみるか、他のアドバイスを与えることができますか?

ありがとうございました、

ラザロ

4

1 に答える 1

2

コンパイラのバグです。先に進んで、GCC 担当者にバグ レポートを提出してください。

于 2015-01-28T22:19:10.260 に答える