无法得到最简单的凤凰lambda编译

时间:2013-05-13 10:29:26

标签: c++ boost boost-phoenix

我目前正在努力让以下非常简单的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编译这些。我做错了什么?

1 个答案:

答案 0 :(得分:4)

首先,始终

#include <boost/phoenix/phoenix.hpp>

除非你知道自己在做什么。

其次,您需要将operator<<的任一操作数设为凤凰终端,否则,它将只是

std::cout << "Lambda!!"

这是std::ostream& ...

类型的表达式

现在,你可以做任何事,真的,例如。

phx::ref(std::cout) << "Lambda!!"

std::cout << phx::val("Lambda!!")

要么编译。