#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==