Ошибка оператора [] с пользовательским аргументом Boost C++ Phoenix

С существующим аргументом Boost Phoenix (заполнитель), таким как _1Я могу использовать оператор массива / индекс. Например, следующий отрывок будет отображать 1,

int arr[4] = {1,2,3,4};
std::cout << _1[0](arr) << std::endl;

Однако, если я определю свой собственный аргумент-заполнитель:

phoenix::actor<phoenix::expression::argument<1>::type> const my_1 = {{}};

хотя он прекрасно работает без украшений (следующие результаты 7):

std::cout << my_1(7) << std::endl;

если я попытаюсь использовать оператор индекса (как указано выше):

std::cout << my_1[0](arr) << std::endl;

Я получаю много ошибок; В итоге, в G++ 4.7.2 вывод аргументов шаблона завершается неудачно; в Clang 3.2 мне сказали, что функция не может возвращать тип массива.

Как сделать так, чтобы мой аргумент-заполнитель Phoenix поддерживал оператор индекса?

1 ответ

Решение

Просто избавься от actor часть и работает нормально

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

int main()
{
    namespace phx = boost::phoenix;

    phx::expression::argument<1>::type const my_1 = {{{}}};
    int arr[4] = { 1, 2, 3, 4 };
    std::cout << my_1[0](arr) << '\n';
}

Онлайн демо

Другие вопросы по тегам