fork download
  1. #include <iostream>
  2. #include <functional>
  3.  
  4. class Foo
  5. {
  6. public:
  7. explicit Foo(int n) : n_{n} {}
  8.  
  9. int getN() const
  10. {
  11. return n_;
  12. }
  13.  
  14. private:
  15. int n_;
  16. };
  17.  
  18. class Bar
  19. {
  20. public:
  21. void bar(const std::function<int(std::function<int()>)>& callback,
  22. const std::function<int()>& callback2) const
  23. {
  24. std::cout << "The value of n+1 is: " << callback(callback2) << '\n';
  25. }
  26. };
  27.  
  28. class FooBar
  29. {
  30. public:
  31. int increment(const std::function<int()>& callback) const
  32. {
  33. auto n = callback();
  34. return ++n;
  35. }
  36. };
  37.  
  38. int main()
  39. {
  40. Bar b;
  41. b.bar(std::bind(&FooBar::increment, FooBar{},
  42. std::bind(&Foo::getN, Foo{2018})),
  43. std::bind(&Foo::getN, Foo{2018}));
  44.  
  45. return 0;
  46. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:43:34: error: no matching function for call to ‘Bar::bar(std::_Bind_helper<false, int (FooBar::*)(const std::function<int()>&) const, FooBar, std::_Bind<std::_Mem_fn<int (Foo::*)() const>(Foo)> >::type, std::_Bind_helper<false, int (Foo::*)() const, Foo>::type)’
  std::bind(&Foo::getN, Foo{2018}));
                                  ^
prog.cpp:21:10: note: candidate: void Bar::bar(const std::function<int(std::function<int()>)>&, const std::function<int()>&) const
     void bar(const std::function<int(std::function<int()>)>& callback,
          ^~~
prog.cpp:21:10: note:   no known conversion for argument 1 from ‘std::_Bind_helper<false, int (FooBar::*)(const std::function<int()>&) const, FooBar, std::_Bind<std::_Mem_fn<int (Foo::*)() const>(Foo)> >::type {aka std::_Bind<std::_Mem_fn<int (FooBar::*)(const std::function<int()>&) const>(FooBar, std::_Bind<std::_Mem_fn<int (Foo::*)() const>(Foo)>)>}’ to ‘const std::function<int(std::function<int()>)>&’
stdout
Standard output is empty