Ошибка компиляции с помощью hpx::dataflow и функции-члена

Как правильно вызвать hpx::dataflow с помощью функции-члена?

hpx::async работает нормально, но мы не можем понять, почему hpx::dataflow не компилируется.

#include <hpx/hpx_main.hpp>
#include <hpx/hpx.hpp>
#include <memory>

class A {
public:
  A& do_work(double x, const A& y, const A& z) {
    i = x + y.i + z.i;
    return *this;
  }

  double i = 1.0;
};

int main() {
  // Create instances
  std::vector<std::unique_ptr<A>> vec;
  for (int i = 0; i < 3; ++i) {
    vec.emplace_back( std::make_unique<A>() );
  }

  std::vector<hpx::shared_future<A&>> a1(3);
  std::vector<hpx::shared_future<A&>> a2(3);

  // works
  a1[1] = hpx::async( &A::do_work, vec[1].get(), 1.0, *vec[0], *vec[2] );

  // compiler error here
  a2[1] = hpx::dataflow( hpx::util::unwrapping_all( &A::do_work ),
            vec[1].get(), 2.0, a1[0], a2[0] );

  return 0;
}

Ошибка компилятора говорит:

hpx.cpp:29:100:   required from here
.../hpx/hpx/traits/get_remote_result.hpp:25:20: error: invalid cast from type ‘std::remove_reference<A&>::type’ {aka
‘A’} to type ‘A*’ return Result(std::move(rhs));

Используемая версия HPX — 1.2.0 с GCC 8.1.


person Arkantos493    schedule 27.01.2019    source источник
comment
Компилятор также сообщает, в какой именно строке это происходит, так что не пропустите эту важную информацию!   -  person Marcus Müller    schedule 27.01.2019


Ответы (1)


Это похоже на ошибку для меня. Для этого я создал задачу в репозитории: https://github.com/STEllAR-GROUP/hpx/issues/3639.

person hkaiser    schedule 30.01.2019
comment
Я создал запрос на включение, устраняющий проблему здесь: github.com/STEllAR-GROUP/hpx /тянуть/3640. Еще раз спасибо за отчет. - person hkaiser; 31.01.2019
comment
Спасибо за быстрый ответ и исправление! - person Arkantos493; 31.01.2019