#include <type_traits>
#include <vector>
#include <deque>
#include <string>
#include "iostream"
using namespace std;
template<class T>
auto maybe_reserve(T& v, size_t n, int)
    -> decltype(v.reserve(n), void())
{
    cout<< "call reserve" << endl;
  v.reserve(n);
}
 
template<class T>
void maybe_reserve(T&, size_t, long){
	cout << "don't call" << endl;
}
 
template<typename T>
T fill(size_t n) {
    T v;
    maybe_reserve(v, n, 0);
    for(size_t i = 0; i < n; ++i){
        v.push_back('a');
    }
    return v;
}
int main(){
	fill<vector<int>>(5);
	fill<string>(5);
	fill<deque<int>>(5);
}
				I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlICJpb3N0cmVhbSIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdGVtcGxhdGU8Y2xhc3MgVD4KYXV0byBtYXliZV9yZXNlcnZlKFQmIHYsIHNpemVfdCBuLCBpbnQpCiAgICAtPiBkZWNsdHlwZSh2LnJlc2VydmUobiksIHZvaWQoKSkKewogICAgY291dDw8ICJjYWxsIHJlc2VydmUiIDw8IGVuZGw7CiAgdi5yZXNlcnZlKG4pOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIG1heWJlX3Jlc2VydmUoVCYsIHNpemVfdCwgbG9uZyl7Cgljb3V0IDw8ICJkb24ndCBjYWxsIiA8PCBlbmRsOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpUIGZpbGwoc2l6ZV90IG4pIHsKICAgIFQgdjsKICAgIG1heWJlX3Jlc2VydmUodiwgbiwgMCk7CiAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKXsKICAgICAgICB2LnB1c2hfYmFjaygnYScpOwogICAgfQogICAgcmV0dXJuIHY7Cn0KaW50IG1haW4oKXsKCWZpbGw8dmVjdG9yPGludD4+KDUpOwoJZmlsbDxzdHJpbmc+KDUpOwoJZmlsbDxkZXF1ZTxpbnQ+Pig1KTsKfQ==