我正在使用 VS 2017 社区版、英特尔编译器 17.00 更新 6 和 boost 1.66,试图了解 boost::multiprecision::float128 的方法。从字面上获取示例代码并将其放入 VS 的新项目中。
编译给出了多个错误,大致分为两个类别/文件:
在 float128.hpp 中:
fmaq、remquoq和remainderq的三个错误“错误:标识符“xxx”未定义”。事实上,我无法找到它们的定义 - 缺少包含?
全局范围没有“signbitq” - 这又看起来像缺少定义(即与上面相同)
对于 GCC,在 quadmath.h 中可以找到上述函数,但是,在使用 ICC 时,boost 标头似乎不包含它(即设置了 BOOST_MP_USE_QUAD)。
- 在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include\xutility 中:此声明中不允许使用显式模板参数列表。有三个计数
我假设我需要从 VS 中删除默认放入的东西,但我不知道究竟是什么。
谢谢您的帮助
编辑:上面的错误#2实际上根本不反对提升(我应该把它移到一个单独的问题吗?)。以下代码从这里复制!没有在我的设置中编译:
#include <iostream>
#include <string>
int main() {
std::string str("Test string");
for (std::string::iterator it = str.begin(); it != str.end(); ++it)
std::cout << *it;
std::cout << '\n';
return 0;
}
确切的错误(其中之一)是:
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include\xutility(680): error : an explicit template argument list is not allowed on this declaration
1> _INLINE_VAR constexpr bool _Is_iterator_v<_Ty, void_t<_Iter_cat_t<_Ty>>> = true;
1> ^
1> detected during:
1> instantiation of "const bool std::_Is_iterator_v [with _Ty=char *, <unnamed>=void]" at line 520 of "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include\string"
1> instantiation of "std::basic_string<_Elem, std::char_traits<_Elem>, std::allocator<_Elem>> std::_Integral_to_string<_Elem,_Ty>(_Ty) [with _Elem=char, _Ty=int]" at line 554 of "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include\string"
我发现这表明使用的特定版本(ICC-17.0 Up6 和 VS 15.6)可能存在问题,但是我无法真正迁移到新的英特尔编译器,也无法测试 VS 15.4