Переменная, скрывающаяся внутри вложенных блоков let в Boost Phoenix

У меня возникают проблемы с вложенными блоками let в Boost Phoenix, когда «внутренняя» локальная переменная скрывает «внешнюю» локальную переменную. Даже с примером «Видимости» из документации Вот, показано здесь:

#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 в Фениксе? В настоящее время я использую Ubuntu 13.04 со снимком GCC версии 4.8; Лязг 3,2; Повышение 1,49; а также Повышение 1,53.

0

Решение

Это определенно ошибка в Фениксе. Следующие компиляции:

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);

Bizarre. Не могли бы вы подать ошибку на https://svn.boost.org/trac/boost/ (нажмите «Новый билет»). Благодарю. (Примечание: я не сопровождающий.)

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector