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 を必要とせずにコードが正常にビルドされます。