boostorg / boostorg/preprocessor

BOOST_PP_VARIADICS_MSVC set incorrectly for EDG in Microsoft emulation mode

未关闭
#41 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
C++
星标
118
派生
76
PR 合并指标
30 天内没有已合并 PR

描述

In preprocessor/config/config.hpp, the condition for setting BOOST_PP_VARIADICS_MSVC to 1 is:

`# if defined _MSC_VER && _MSC_VER >= 1400 && !defined(__clang__) && (defined(__INTELLISENSE__) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) || !(defined __EDG__ || defined __GCCXML__ || (defined __NVCC__ && defined __CUDACC__) || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI)) && (!defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL)
`
Unless modified by a customer, when the EDG front end is invoked in Microsoft emulation mode, it defines both _MSC_VER and __EDG__, with the value of _MSVC_TRADITIONAL being set depending on the --[no_]_ms_std_preprocessor command-line option. When the EDG front end is invoked emulating the traditional Microsoft preprocessor (currently the default in Microsoft emulation mode), this results in defining BOOST_PP_VARIADICS_MSVC to 0, causing errors when Boost preprocessor variadics are used.

Presumably the fix is simply to remove the "defined __EDG__" test in this conditional.

贡献指南

这个仓库没有索引到贡献指南

调研方向

从 preprocessor/config/config.hpp 开始,检查设置 BOOST_PP_VARIADICS_MSVC 的条件,重点关注 _MSC_VER、__EDG__ 和 _MSVC_TRADITIONAL 之间的交互。当 Microsoft 模拟模式下的 EDG 不再错误地将 BOOST_PP_VARIADICS_MSVC 设置为 0 时,该 issue 即完成;未提及具体的测试文件。

由索引模型根据 Issue 内容生成。

评估

技术栈
cpp
领域
compilers
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
停滞
描述清晰度
描述清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。