BOOST_PP_ENUM_SHIFTED(n, def, data)

BOOST_PP_ENUM_SHIFTED(n, def, data) は、

def(z, data, 1), def(z, data, 2) ... def(z, data, n-1)

の様に指定した回数分だけマクロの展開を行います。

#include <iostream>

#include <boost/preprocessor.hpp>

#include <boost/range/algorithm/for_each.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/assign.hpp>

#define N(z, n, type) n
#define TYPE(z, n, type) type

int
main(){
    using namespace boost::assign;

    std::vector<int> array;
    array += BOOST_PP_ENUM_SHIFTED(6, N, int);    // 1, 2, 3, 4, 5 に展開
    boost::for_each(array, [](int n){
        std::cout << n << std::endl;
    });
    
    boost::fusion::vector<
        BOOST_PP_ENUM_SHIFTED(6, TYPE, int)    // int, int, int, int, int
    > int_6_vector;

    return 0;
}

マクロでループするっていう発想が斬新過ぎる。


[boost]
ver 1.44.0
[参照]
http://d.hatena.ne.jp/DigitalGhost/20091213/1260732009