在MSVC 2017 Update 8编译器中使用官方的Boost.Hana

我们想和大家分享一下我们之前的工作进展 公告 关于使用MSVC编译器启用Boost.Hana。作为一个快速的背景, 路易迪翁 Hana作者和我们共同同意提供 vcpkg中Boost.Hana的版本 在Visual C++社区中,促进图书馆对更多C++用户的使用。我们已经确定了一组阻止错误和解决方法,并在我们以前的博客中指出了它们,并声明在修复其余错误的同时,我们将逐步更新vcpkg中的Boost.Hana版本,最终将其删除并用master repo替换。我们可以在vcpkg中公开进行这个开发,而不会妨碍依赖于库的新用户。

null

今天,我们很高兴地宣布,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。

图片[1]-在MSVC 2017 Update 8编译器中使用官方的Boost.Hana-yiteyi-C++库

下一步是什么…

  • 在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软件 ).

谢谢您,

向凡,乌尔齐卢夫桑巴特

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享