BOOST_PP_MOD_D マクロは第2引数と第3引数の余りに展開される。 これは、最も効率的に BOOST_PP_WHILE に再入する。

Usage

BOOST_PP_MOD_D(d, x, y)

Arguments

d
利用可能な次の BOOST_PP_WHILE の繰り返し。
x
演算の割られる方(分子)。 有効な値の範囲は 0 から BOOST_PP_LIMIT_MAG までである。
y
演算の割る方(分母)。 有効な値の範囲は 0 から BOOST_PP_LIMIT_MAG までである。

Remarks

もし y0 なら、結果は未定義である。

See Also

Requirements

Header:  <boost/preprocessor/arithmetic/div.hpp>

Sample Code

#include <boost/preprocessor/arithmetic/mod.hpp>
#include <boost/preprocessor/list/filter.hpp>
#include <boost/preprocessor/logical/not.hpp>

#define LIST (1, (2, (3, (4, (5, BOOST_PP_NIL)))))

#define EVEN_P(d, _, num) BOOST_PP_NOT(BOOST_PP_MOD_D(d, num, 2))
#define EVEN(list) BOOST_PP_LIST_FILTER(EVEN_P, nil, list)

EVEN(LIST) // expands to (2, (4, BOOST_PP_NIL))

#define ODD_P(d, _, num) BOOST_PP_MOD_D(d, num, 2)
#define ODD(list) BOOST_PP_LIST_FILTER(ODD_P, nil, list)

ODD(LIST) // expands to (1, (3, (5, BOOST_PP_NIL)))