0

当“内部”局部变量隐藏“外部”局部变量时,我在 Boost Phoenix 中的嵌套 let 块遇到了一些问题。即使使用此处文档中的“可见性”示例,此处显示:

#include <iostream>
#include <boost/phoenix.hpp>

namespace phoenix = boost::phoenix;
using namespace phoenix::local_names;

int main(int argc, char *argv[])
{
  phoenix::let(_x = 1, _y = ", World")
  [
    phoenix::let(_x = "Hello") // hides the outer _x
    [
      std::cout << _x << _y // prints "Hello, World"
    ]
  ]();

  return 0;
}

我收到以下错误:

GCC:   "error: function returning an array"
Clang: "error: function cannot return array type 'result_type' (aka 'char [6]')"

有谁知道我如何在 Phoenix 的内部 let 块的范围内“隐藏”这样一个变量?我目前正在使用带有 GCC 版本 4.8 快照的 Ubuntu 13.04;铿锵声 3.2; 提升 1.49;还有 Boost 1.53。

4

1 回答 1

2

这绝对是凤凰城的一个错误。以下编译:

int y = 0;
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = _1)[ _a ]])(y);

以下没有:

int y = 0;
int x = (phoenix::let(_a = 1, _b = 2)[phoenix::let(_b = 3)[ _a ]])(y);

奇怪。您能否在https://svn.boost.org/trac/boost/提交错误(单击“新票证”)。谢谢。(注意:我不是维护者。)

于 2013-05-07T15:03:33.063 回答