fork 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(void(v.reserve(n)))
  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. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of ‘void maybe_reserve(T&, size_t, int) [with T = std::deque<int>; size_t = unsigned int]’:
prog.cpp:23:5:   required from ‘T fill(size_t) [with T = std::deque<int>; size_t = unsigned int]’
prog.cpp:32:20:   required from here
prog.cpp:12:3: error: ‘class std::deque<int>’ has no member named ‘reserve’
stdout
Standard output is empty