3

C++11 機能を使用するCPP プロジェクトをビルドしようとしています。GCC-4.8.3 で-std=c++11を指定すると、コードにエラーはありません。

ご存じのとおり、Visual Studio 2013 は C++11 を完全にはサポートしていません。代わりに、C++11 をサポートする Intel Parallel Studio XE 2015 をインストールしました。

さて、Visual Studio では、VS コンパイラをバイパスするように Intel コンパイラを指定しました。下の図を参照してください。

ここに画像の説明を入力

以下のようにC++-11サポートも有効にしました

ここに画像の説明を入力

ただし、いくつかのエラーが発生し、スタック トレースは、エラーが Microsoft Visual Studio ヘッダー ファイルに由来することを示しています。

VS コンパイラは Intel コンパイラに完全に置き換えられていないようです。

完全な出力は、pastebinで入手できます。

完全な出力が長いことはわかっているので、エラーの 1 つを生成したコード トレースを次に示します。2つのエラーは似ていると思います。

1)

Sequitur<char> s;  char temp_char;
s.push_back(temp_char);

2)

template<typename Type>
void Sequitur<Type>::push_back(Type s){
    //add new symbol:
    Symbol * val = sequence_end->insertBefore(new Value(s));
    if(++length > 1) {
        auto one_from_end = val->prev();
        linkMade(one_from_end);
    }
}

3)

template<typename Type>
void Sequitur<Type>::linkMade(Symbol * first) {
    Symbol * match_location = findAndAddDigram(first);
}

4)

template<typename Type>
Symbol * Sequitur<Type>::findAndAddDigram(Symbol * first) {
    auto out_pair = digram_index.emplace(makeDigramPair(first),first);
}

行でauto、エラーは

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\utility(155): error : no instance of constructor "jw::SymbolWrapper::SymbolWrapper" matches the argument list
              argument types are: (jw::SymbolWrapper)
                : first(_STD forward<_Other1>(_Right.first)),
                       ^
            detected during:
              instantiation of "std::pair<_Ty1, _Ty2>::pair(std::pair<_Other1, _Other2> &&) [with _Ty1=jw::SymbolWrapper, _Ty2=jw::SymbolWrapper, _Other1=jw::SymbolWrapper, _Other2=jw::SymbolWrapper, <unnamed>=void]" at line 142

それを修正するアイデアはありますか?Intel コンパイラのヘッダー ファイルに従わず、C++11 をサポートしていないことがわかっている VS ヘッダー ファイルに誤って従うのはなぜですか?

~~~~~~~~~~~~~~~~~~~~ 更新 ~~~~~~~~~~~~~~~~~~~~

Visual Studio 2015 RC エディションをテストすると、Intel Compiler を必要とせずにコードが正常にビルドされます。

4

0 に答える 0