【急いでないです】とある不可解な一文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
SUE
記事: 41
登録日時: 7年前

【急いでないです】とある不可解な一文について

#1

投稿記事 by SUE » 6年前

先日もお世話になりましたSUEです。
今回はboost.preprocessorを使おうとしたときに生じた疑問についてです。

このサイトhttp://d.hatena.ne.jp/DigitalGhost/20111205/1323052916を見て、これは便利だと思い、実際にBOOST_PP_VARIADIC_TO_ARRAYを使おうとしたのですが、
未定義だと言われてしまいます。そこでソースを見てみたところ(見づらいのでプリプロセッサの#は除いてあります)、

コード:

 if BOOST_PP_VARIADICS//0と定義されていた
    if BOOST_PP_VARIADICS_MSVC
        define BOOST_PP_VARIADIC_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY_2(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),(__VA_ARGS__))
    else
        define BOOST_PP_VARIADIC_TO_ARRAY(...) BOOST_PP_TUPLE_TO_ARRAY((__VA_ARGS__))
    endif
 endif
というように、先のサイトにも書いてあるとおり、可変長マクロを使えるかどうか判別するBOOST_PP_VARIADICSが0に定義されていました。
しかし今使っているVC++では可変長マクロに対応しているはずであり、なんか変だな、と思ってBOOST_PP_VARIADICSの定義まで見に行ったところ

コード:

 if !defined BOOST_PP_VARIADICS
     /* variadic support explicitly disabled for all untested compilers */
     if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ ...//以下略
         define BOOST_PP_VARIADICS 0
    /* VC++ (C/C++) */
    elif defined _MSC_VER && _MSC_VER >= 1400 && !defined __EDG__//問題の一文、__EDG__は1
        if _MSC_VER >= 1400
            define BOOST_PP_VARIADICS 1
            define BOOST_PP_VARIADICS_MSVC 1
        else
            define BOOST_PP_VARIADICS 0
        endif
/*中略*/
    else
        define BOOST_PP_VARIADICS 0//結局ここに行き着く
    endif
とあり、どうやらこの__EDG__が定義されていることで可変長マクロが使えなくなっているようでした。
しかし、同じ(VC++のバージョンが2005以降の)コンパイラでも、この条件文で可変長マクロの機能が使えたり使えなくなったりするのは妙なことだと思いました。
さらに、直後に同じような条件文、if _MSC_VER >= 1400を続けているのも意味が判りません。

これが解決しないと全く先へ進めないというわけでもないのですが、どのようなことか教えていただきたいです。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

“C言語何でも質問掲示板” へ戻る