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<>になって、引数がどっかにいってしまう。