fork(6) download
  1. #include <type_traits>
  2. #include <vector>
  3. #include <deque>
  4. #include <string>
  5. #include "iostream"
  6. using namespace std;
  7. template<class T>
  8. auto maybe_reserve(T& v, size_t n, int)
  9. -> decltype(v.reserve(n), void())
  10. {
  11. cout<< "call reserve" << endl;
  12. v.reserve(n);
  13. }
  14.  
  15. template<class T>
  16. void maybe_reserve(T&, size_t, long){
  17. cout << "don't call" << endl;
  18. }
  19.  
  20. template<typename T>
  21. T fill(size_t n) {
  22. T v;
  23. maybe_reserve(v, n, 0);
  24. for(size_t i = 0; i < n; ++i){
  25. v.push_back('a');
  26. }
  27. return v;
  28. }
  29. int main(){
  30. fill<vector<int>>(5);
  31. fill<string>(5);
  32. fill<deque<int>>(5);
  33. }
Success #stdin #stdout 0s 2988KB
stdin
Standard input is empty
stdout
call reserve
call reserve
don't call