использование std :: apply для std :: bind - PullRequest
0 голосов
/ 10 октября 2018

Следующее не может быть скомпилировано с gcc 8.2.0 [ stacktrace ]

#include <iostream>
#include <tuple>
#include <functional>

void print(int a, int b, int c) {
  std::cout << a << ", " << b << ", " << c << std::endl;
}

int main() {
  auto b = std::bind(print, 1);
  auto t = std::make_tuple(2, 3);

  std::apply(b, t);
}

Лично я не понимаю, почему, похоже, что это работает здравый смысл (впо крайней мере, правильный функциональный язык).

Может кто-нибудь объяснить причину, по которой он не работает?

1 Ответ

0 голосов
/ 10 октября 2018

С std::bind необходимо также указать заполнители для несвязанных аргументов.

auto b = std::bind(print, 1, std::placeholders::_1, std::placeholders::_2);
...