boostorg / boostorg/preprocessor

BOOST_PP_VARIADICS_MSVC set incorrectly for EDG in Microsoft emulation mode

オープン
#41 コメント 1 件 リアクション 0 件 担当者 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 を短くまとめたダイジェスト。