当“内部”局部变量隐藏“外部”局部变量时,我在Boost Phoenix中遇到嵌套let块的问题。即使使用文档here中的“可见性”示例,也显示在此处:
#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]')"
有没有人知道如何在凤凰城内部let块的范围内“遮蔽”这样的变量?我目前正在使用带有GCC版本4.8快照的Ubuntu 13.04; Clang 3.2;提升1.49;并且还提升1.53。
答案 0 :(得分: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/提交一个错误(点击“新票”)。谢谢。 (注意:我不是维护者。)