2

次のように BOOST_PP_VARIADIC_SIZE をテストしています。

#include <boost/preprocessor.hpp>
#define PORT_HOST A,B
#define PORT_ADDR 1,2,3,4
#define VAR_DATA x, y, z
BOOST_PP_VARIADIC_SIZE(VAR_DATA)

これは、展開後に得られるものです。

BOOST_PP_VARIADIC_SIZE(x, y, z)

しかし、私がこれを行うと:

#define SEQ (B)(O)(O)(S)(T)
BOOST_PP_SEQ_ENUM(SEQ) // expands to B, O, O, S, T

展開後、次のようになります。

B, O, O, S, T

私は Mac OS で最新の clang を使用しています。g++ でも同じ結果が得られます。

ここで何が起こっているのだろうと思います。variadic boost プリプロセッサが正しく展開されない理由。ブースト1.49.0を使用しています

4

1 に答える 1

2

答えが見つかりました。Boost 1.49では、ヘッダーファイルBOOST / Preprorccessor / config.hppで、可変個引数マルコスをサポートするようにclangが定義されていません。理由は「テストされていない」です....:(

clangを有効にすると、可変個引数のmarcoが期待どおりに拡張されます。

于 2012-06-08T23:44:23.183 に答える