精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究
报错的源代码行是:
friend BOOST_OPERATORS_CONSTEXPR bool operator==(const U& y, const T& x) { return x == y; }
出问题的代码涉及到结构体、继承、友元、模板、模板参数和操作符重载,大家也注意到是BOOST的代码,BOOST本来就很复杂,出这问题非常头疼。
报错的编译输出是:
3>D:\boost_1_74_0\boost\operators.hpp(161,1): fatal error C1001: 内部编译器错误。
3>(编译器文件“msc1.cpp”,第 1603 行)
3> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。
3>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com
3>请选择 Visual C++
3>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。
3>D:\boost_1_74_0\boost\operators.hpp(141): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::equality_comparable2<T,U,B>”的引用
3> with
3> [
3> T=boost::serialization::version_type,
3> U=unsigned int,
3> B=boost::operators_impl::operators_detail::empty_base<boost::serialization::version_type>
3> ]
3>D:\boost_1_74_0\boost\operators.hpp(421): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::less_than_comparable2<T,U,boost::operators_impl::equality_comparable2<T,U,B>>”的引用
3> with
3> [
3> T=boost::serialization::version_type,
3> U=unsigned int,
3> B=boost::operators_impl::operators_detail::empty_base<boost::serialization::version_type>
3> ]
3>D:\boost_1_74_0\boost\operators.hpp(168): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::totally_ordered2<boost::serialization::version_type,unsigned int,boost::operators_impl::operators_detail::empty_base<T>>”的引用
3> with
3> [
3> T=boost::serialization::version_type
3> ]
3>D:\boost_1_74_0\boost\operators.hpp(152): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::equality_comparable1<T,B>”的引用
3> with
3> [
3> T=boost::serialization::version_type,
3> B=boost::operators_impl::totally_ordered2<boost::serialization::version_type,unsigned int,boost::operators_impl::operators_detail::empty_base<boost::serialization::version_type>>
3> ]
3>D:\boost_1_74_0\boost\operators.hpp(427): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::less_than_comparable1<T,boost::operators_impl::equality_comparable1<T,B>>”的引用
3> with
3> [
3> T=boost::serialization::version_type,
3> B=boost::operators_impl::totally_ordered2<boost::serialization::version_type,unsigned int,boost::operators_impl::operators_detail::empty_base<boost::serialization::version_type>>
3> ]
3>D:\boost_1_74_0\boost\serialization\serialization.hpp(61): message : 查看对正在编译的 类 模板 实例化“boost::operators_impl::totally_ordered1<boost::serialization::version_type,boost::operators_impl::totally_ordered2<boost::serialization::version_type,unsigned int,boost::operators_impl::operators_detail::empty_base<T>>>”的引用
3> with
3> [
3> T=boost::serialization::version_type
3> ]
3>“E:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\CL.exe”中的内部编译器错误
3> 请选择 Visual C++
3>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息
我试了几个方法都没有解决,比如编译选项的优化;C++标准的调整,用C++11、C++14、C++17或C++20都不行;有些国外网友说出问题的代码可能导致编译器展开死循环,要改代码,但是这是BOOST的代码,不可能改。所以问题进入僵局。
后来发现在Release模式下编译不出错,Debug模式下才出这样的错误,所以就将就用了。
BOOST不是微软的,不归VS管,所以不是自己平台的代码,微软兼容起来有困难,C++标准虽然一样,但是各个公司实现的方法不一样,这个不一样可能就会导致问题,Debug和Release的编译链接参数不一样,具体哪个细节不行,很难查的,用开源的代码就要有这个心理准备。