我们想和大家分享一下我们之前的工作进展 公告 关于使用MSVC编译器启用Boost.Hana。作为一个快速的背景, 路易迪翁 Hana作者和我们共同同意提供 vcpkg中Boost.Hana的版本 在Visual C++社区中,促进图书馆对更多C++用户的使用。我们已经确定了一组阻止错误和解决方法,并在我们以前的博客中指出了它们,并声明在修复其余错误的同时,我们将逐步更新vcpkg中的Boost.Hana版本,最终将其删除并用master repo替换。我们可以在vcpkg中公开进行这个开发,而不会妨碍依赖于库的新用户。
今天,我们很高兴地宣布,vcpkg版本的Boost.Hana现在只指向官方的主回购,而不是我们的fork。
使用VS2017 Update 8 MSVC编译器,Boost.Hana将使用 拉取请求 否则以后会造干净的。我们建议您通过 vcpkg公司 .
为了完全透明,以下是截至2018年8月,我们对活动bug和使用的源代码解决方法的立场:
源解决方案就位
Boost.Hana官方repo中还有3个解决VS2017 Update 8编译器中活动bug的方法:
// Multiple copy/move ctors #define BOOST_HANA_WORKAROUND_MSVC_MULTIPLECTOR_106654 // Forward declaration of class template member function returning decltype(auto) #define BOOST_HANA_WORKAROUND_MSVC_DECLTYPEAUTO_RETURNTYPE_662735 // Parser incorrectly parses a comparison operation as a template id // This issue only impacts /permissive- or /std:c++17 #define BOOST_HANA_WORKAROUND_MSVC_RDPARSER_TEMPLATEID_616568
删除了VS2017 Update 8版本不再需要的23个源代码解决方法。 全部详细信息 更多信息。
// Fixed by commit f4e60b2ecc169b0a5ec51d713125801adae24bc2, 20180323 // Note, the workaround requires /Zc:externConstexpr #define BOOST_HANA_WORKAROUND_MSVC_NONTYPE_TEMPLATE_PARAMETER_INTERNAL // Fixed by commit c9999d916f1d73bc852de709607b2ca60e76a4c9, 20180513 #define BOOST_HANA_WORKAROUND_MSVC_CONSTEXPR_NULLPTR #define BOOST_HANA_WORKAROUND_MSVC_CONSTEXPR_ARRAY_399280 // error C2131: expression did not evaluate to a constant // test\_includeautofor_each.hpp #define BOOST_HANA_WORKAROUND_MSVC_FOR_EACH_DISABLETEST // testfunctionalplaceholder.cpp #define BOOST_HANA_WORKAROUND_MSVC_CONSTEXPR_ADDRESS_DISABLETEST #define BOOST_HANA_WORKAROUND_MSVC_CONSTEXPR_ARRAY_DISABLETEST // Fixed by commit 5ef87ec5d20b45552784a40fe455c04c257c7b08, 20180516 // Generic lambda preparsing and static capture #define BOOST_HANA_WORKAROUND_MSVC_GENERIC_LAMBDA_NAME_HIDING_616190 // Fixed by commit 9c4869e61b5ad301f1fe265193241d2c74729a1c, 20180518 // ICE when try to give warning on the format string for printf // examplemiscprintf.cpp #define BOOST_HANA_WORKAROUND_MSVC_PRINTF_WARNING_506518 // Fixed by commit 095130d02c8805517bbaf93d92415041eecbca00, 20180521 // decltype behavior difference when comparing character array and std::string // testorderable.cpp #define BOOST_HANA_WORKAROUND_MSVC_DECLTYPE_ARRAY_616099 // Fixed by commit a488f9dccbfb4ceade4104c0d8d00e25d6ac7d88, 20180521 // Member with array type // testissuesgithub_365.cpp #define BOOST_HANA_WORKAROUND_MSVC_GITHUB365_DISABLETEST // Fixed by commit 7a572ef6535746f1cee5adaa2a41edafca6cf1bc, 20180522 // Member with the same name as the enclosing class // testissuesgithub_113.cpp #define BOOST_HANA_WORKAROUND_MSVC_PARSEQNAME_616018_DISABLETEST // Fixed by commit 3c9a06971bf4c7811db1a21017ec509a56d60e59, 20180524 #define BOOST_HANA_WORKAROUND_MSVC_VARIABLE_TEMPLATE_EXPLICIT_SPECIALIZATION_616151 // error C3520: 'Args': parameter pack must be expanded in this context // example utorialintegral-branching.cpp #define BOOST_HANA_WORKAROUND_MSVC_LAMBDA_CAPTURE_PARAMETERPACK_616098_DISABLETEST // Fixed by commit 5b1338ce09f7827e5b9248bcba2f519043044fef, 20180529 // Narrowing warning on constant float // examplecoreconvertembedding.cpp #define BOOST_HANA_WORKAROUND_MSVC_NARROWING_CONVERSION_FLOAT_616032 // Fixed by commit be8778ab26957ae7c6a36376a9ae2d049d64a095, 20180611 // Pack expansion of decltype // examplehash.cpp #define BOOST_HANA_WORKAROUND_MSVC_PACKEXPANSION_DECLTYPE_616094 // Fixed by commit 5fd2bf807a0320167c72d9960b32d823a634c04d, 20180613 // Parser error when using '{}' in template arguments #define BOOST_HANA_WORKAROUND_MSVC_PARSE_BRACE_616118 // Fixed by commit ce4f90349574b4acc955cf1eb04d7dc6a03a568e, 20180614 // Generic lambda and sizeof... // test ypeis_valid.cpp #define BOOST_HANA_WORKAROUND_MSVC_GENERIC_LAMBDA_RETURN_TYPE_269943 // Return type of generic lambda is emitted as a type token directly after pre-parsing #define BOOST_HANA_WORKAROUND_MSVC_GENERIC_LAMBDA_RETURN_TYPE_610227 // Fixed by commit 120bb866980c8a1abcdd41653fa084d6c8bcd327, 20180615 // Nested generic lambda // testindex_if.cpp #define BOOST_HANA_WORKAROUND_MSVC_NESTED_GENERIC_LAMBDA_615453 // Fixed by commit 884bd374a459330721cf1d2cc96d231de3bc68f9, 20180615 // Explicit instantiation involving decltype // example utorialintrospection.cpp #define BOOST_HANA_WORKAROUND_MSVC_DECLTYPE_EXPLICIT_SPECIALIZATION_508556 // Fixed by commit ff9ef6d9fe43c54f7f4680a2701ad73de18f9afb, 20180620 // constexpr function isn't evaluated correctly in SFINAE context #define BOOST_HANA_WORKAROUND_MSVC_SFINAE_CONSTEXPR_616157 // Fixed by commit 19c35b8c8a9bd7dda4bb44cac1d9d446ed1b20ac, 20180625 // Pack expansion of decltype // testdetailvariadicat.cpp // testdetailvariadicdrop_into.cpp #define BOOST_HANA_WORKAROUND_MSVC_PACKEXPANSION_DECLTYPE_616024
编译器中剩余的bug
- VS2017 Update 8发行版有3个活动bug。这是从25个活跃的错误从更新7版本。
- 我们计划在今年晚些时候发布VS2017 Update 9之前修复这些剩余的bug。
下一步是什么…
- 在VisualStudio2017的剩余更新中,我们将继续消除阻止Boost.Hana库上游版本的剩余MSVC错误。
- 我们将继续提供最新进展情况。下一个更新将在我们发布VS2017 update 9时进行。
- 我们将确保依赖vcpkg中此库的用户不会受到我们工作的影响。
-
在MSVC中启用Range-v3的情况如何?
- 类似地,我们正在跟踪编译器中的所有Range-v3阻塞错误并修复它们。我们的计划是在剩余的VS2017 Update 9版本中修复它们。
最后
我们很乐意为您下载 Visual Studio 2017版本15.8 并尝试所有新的C++特性和改进。一如既往,我们欢迎您的反馈。我们可以通过下面的评论或电子邮件联系我们( visualcpp@microsoft.com ). 如果您在Visual Studio 2017中遇到MSVC的其他问题,请联系我们 帮助>报告产品中的问题 ,或通过 开发者社区 . 把你的建议告诉我们 用户语音 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).
谢谢您,
向凡,乌尔齐卢夫桑巴特