Boost.Phoenix マニピュレータの実装

Boost.Phoenixのラムダ式は、std::endlなどのIOマニピュレータを使用することができます(Boost.Lambdaではできなかった)。
どうやってるか気になったので実装を覗いてみました。


以下、簡易実装です。

#include <iostream>

const struct lambda_t {} lambda = {};

typedef std::ostream& (*omanip_type)(std::ostream&);

std::ostream& operator<<(lambda_t x, omanip_type manip)
{
    std::cout << "lambda" << manip;
    return std::cout;
}

int main()
{
    lambda << std::endl;
}

単に関数ポインタの型を書いてるだけでしたね。


Boost.Phoenixのマニピュレータ対応部分は以下のソースにあります:
boost/phoenix/operator/io.hpp