Boost.Phoenixのうーん?

phoenix::letの中で、引数(_1, _2, arg0, arg1系)は参照できず、コンパイルエラーになります。*1この挙動はとても不便ですが、仕様としてこうなのか、実装がバグっていてこうなっているのかはわかりません。

void f() {
    namespace phx = boost::phoenix;
    using boost::phoenix::arg_names::_1;
    using boost::phoenix::local_names::_a;

    int x = 111;

    auto const f = phx::let(_a = 222) [ std::cout << _a << _1 ];
    f(x);
}

ところが、letで引数をローカル変数に束縛すると、let内部でも引数が参照できるようになります。

void f() {
    namespace phx = boost::phoenix;
    using boost::phoenix::arg_names::_1;
    using boost::phoenix::local_names::_a;

    int x = 111;

    auto const f = phx::let(_a = _1) [ std::cout << _a << _1 ];
    f(x);
}

うーん…?

*1:scoped_environmentのEnvがbasic_environment<>になって、引数がどっかにいってしまう。