我目前正在努力让以下非常简单的boost::phoenix::lambda
进行编译:
#include <iostream>
#include <boost/phoenix/scope.hpp>
int main() {
boost::phoenix::lambda[std::cout << "Lambda!!"]();
}
然而,这会产生许多错误(这里发布的内容太多),没有任何错误对我有用。以下是编译器输出的摘录:
error: 'std::ios_base::ios_base(const std::ios_base&)' is private
within this context
error: initializer for
'boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::terminal,
boost::proto::argsns_::term<boost::phoenix::vector0<> >, 0l>::proto_child0
{aka boost::phoenix::vector0<>}' must be brace-enclosed
我正在使用Boost 1.53.0在Windows XP上使用MinGW 4.7.2编译这些。我做错了什么?
答案 0 :(得分:4)
首先,始终
#include <boost/phoenix/phoenix.hpp>
除非你知道自己在做什么。
其次,您需要将operator<<
的任一操作数设为凤凰终端,否则,它将只是
std::cout << "Lambda!!"
这是std::ostream&
...
现在,你可以做任何事,真的,例如。
phx::ref(std::cout) << "Lambda!!"
或
std::cout << phx::val("Lambda!!")
要么编译。