我一直认为 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 &
const 引用只能绑定到左值
这让我很惊讶。我没想到会在any
任何地方看到,更不用说volatile
!
这是否意味着 Boost.Phoenix 实际上本质上比其等效的 C++11 lambdas 慢(忽略我在这里使用的特定编译器)?