我正在尝试构建一个使用 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 编译器。见下图。
我还启用了 C++-11 支持,如下所示
但是,我得到了一些错误,堆栈跟踪显示错误来自 microsoft visual studio 头文件。
看来VS编译器还没有完全被Intel编译器取代。
pastebin提供完整的输出。
我知道完整的输出很长,所以这里是产生错误之一的代码跟踪。我认为两个错误是相似的。
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
有没有办法解决这个问题?为什么它不遵循英特尔编译器头文件并错误地遵循我知道它不支持 C++11 的 VS 头文件?
~~~~~~~~~~~~~~~~~~~~ 更新~~~~~~~~~~~~~~~~~~~~~
测试 Visual Studio 2015 RC 版本,代码构建成功,无需英特尔编译器。