fork download
  1. #include <cstdint>
  2. #include <functional>
  3.  
  4. struct A {
  5. virtual void Bar() = 0;
  6. virtual std::function<void(void)> Baz() = 0;
  7. };
  8.  
  9. __attribute__((noinline)) void Foo(A& a) {
  10. for(size_t i = 0; i < 100000000; ++i)
  11. a.Bar();
  12. }
  13.  
  14. __attribute__((noinline)) void Foz(A& a) {
  15. std::function<void(void)> baz = a.Baz();
  16. for(size_t i = 0; i < 100000000; ++i)
  17. baz();
  18. }
  19.  
  20. struct B final : A {
  21. void Bar() override { }
  22. std::function<void(void)> Baz() override { return []() { }; }
  23. };
  24.  
  25. int main() {
  26. B b;
  27. #if 1
  28. Foo(b);
  29. #else
  30. Foz(b);
  31. #endif
  32. return 0;
  33. }
Success #stdin #stdout 0.06s 4312KB
stdin
Standard input is empty
stdout
Standard output is empty