Boost.Utility IdentityType

Boost 1.50.0から、Utility/IdentityTypeというライブラリが入りました。これは、BOOST_FOREACHのような関数マクロに、カンマ入りの引数を渡すためのマクロを提供するライブラリです。


以下は、std::mapをBOOST_FOREACHで走査する例です。
要素の型std::map::const_referenceはカンマが入っているため、通常そのまま指定することはできませんが、BOOST_IDENTITY_TYPE( ( ) )を通すことで指定できるようになります。

#include <iostream>
#include <map>
#include <boost/foreach.hpp>
#include <boost/utility/identity_type.hpp>

int main()
{
    std::map<int, char> m = {
        {1, 'a'},
        {2, 'b'},
        {3, 'c'}
    };

    BOOST_FOREACH (BOOST_IDENTITY_TYPE((std::map<int, char>::const_reference)) x, m) {
        std::cout << x.first << ',' << x.second << std::endl;
    }
}
1,a
2,b
3,c


参照:
Boost.Utility/IdentityType 1.0.0