无法获得最简单的Phoenix lambda来编译

Cannot get simplest Phoenix lambda to compile

本文关键字:Phoenix lambda 编译 最简单      更新时间:2023-10-16

我目前正试图获得以下非常简单的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

我在Windows XP和Boost 1.53.0上使用MinGW 4.7.2编译这些。我做错了什么?

首先,总是

#include <boost/phoenix/phoenix.hpp>

除非你知道你在做什么。

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

std::cout << "Lambda!!"

std::ostream&型的表达式…

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

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

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