このコードを試すまでは、Boost.Phoenix は型推論を使用してすべてを静的に推論するといつも思っていました。
#include <vector>
#include <boost/phoenix/phoenix.hpp>
using namespace boost::phoenix;
using namespace boost::phoenix::placeholders;
struct Foo { int x; };
int main()
{
std::vector<int> bar;
bind(&Foo::x, ref(bar)[_1])("invalid index"); // oops
return 0;
}
そして警告を受けました:
警告 C4239: 非標準の拡張子が使用されています: 'argument': から
const char [3]
へvolatile const boost::proto::detail::anyns::any &
の変換 非定数参照は左辺値にのみバインドできます
それは私を驚かせました。any
どこにも見られるとは思っていませんでしたvolatile
。
つまり、Boost.Phoenix は実際には同等の C++11 ラムダより本質的に遅いということですか (ここで使用している特定のコンパイラは無視します)。