fork(2) download
  1. #include <iostream>
  2.  
  3. template<typename T, typename F>
  4. size_t do_something_impl(const T& a, F& f)
  5. {
  6. T internal_value(a);
  7. const T& c_iv = internal_value;
  8. // do some complicated things
  9. // loop {
  10. // loop {
  11. f(c_iv);
  12. // do some more things
  13. // }
  14. // }
  15. return 42;
  16. }
  17.  
  18. template<typename T, typename F>
  19. size_t do_something(const T& a, F& f)
  20. {
  21. return do_something_impl<T,F>(a, f);
  22. }
  23.  
  24. template<typename T, typename F>
  25. size_t do_something(const T& a, const F& f)
  26. {
  27. return do_something_impl<T,const F>(a, f);
  28. }
  29.  
  30. struct ConstCallable
  31. {
  32. template<typename T> void operator()(const T&) const {}
  33. };
  34.  
  35. struct NotConstCallable
  36. {
  37. int i;
  38. template<typename T> void operator()(const T&) { ++i; }
  39. };
  40.  
  41. int main()
  42. {
  43. const ConstCallable f;
  44. NotConstCallable g;
  45. double n = 3.14159;
  46. do_something(n, f);
  47. do_something(n, ConstCallable());
  48. do_something(n, g);
  49. return 0;
  50. }
Success #stdin #stdout 0s 3292KB
stdin
Standard input is empty
stdout
Standard output is empty