#include <iostream>
#include <vector>
class C {
public:
void do_whatever() const {}
};
template<class T,typename Func>
void apply( const std::vector<T> &v, Func f )
{
for( const auto &i : v ) f( i );
}
template<class T,typename Func>
void apply( const std::vector<T*> &v, Func f )
{
for( const auto &i : v ) f( *i );
}
int main() {
std::vector<C> vc;
std::vector<C*> vp;
auto call = []( const C &c ) { c.do_whatever(); };
apply( vc, call );
apply( vp, call );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQyB7CnB1YmxpYzoKICAgIHZvaWQgZG9fd2hhdGV2ZXIoKSBjb25zdCB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgVCx0eXBlbmFtZSBGdW5jPgp2b2lkIGFwcGx5KCBjb25zdCBzdGQ6OnZlY3RvcjxUPiAmdiwgRnVuYyBmICkKewogICAgZm9yKCBjb25zdCBhdXRvICZpIDogdiApIGYoIGkgKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCx0eXBlbmFtZSBGdW5jPgp2b2lkIGFwcGx5KCBjb25zdCBzdGQ6OnZlY3RvcjxUKj4gJnYsIEZ1bmMgZiApCnsKICAgIGZvciggY29uc3QgYXV0byAmaSA6IHYgKSBmKCAqaSApOwp9CgoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvcjxDPiB2YzsKICAgIHN0ZDo6dmVjdG9yPEMqPiB2cDsKICAgIGF1dG8gY2FsbCA9IFtdKCBjb25zdCBDICZjICkgeyBjLmRvX3doYXRldmVyKCk7IH07CiAgICBhcHBseSggdmMsIGNhbGwgKTsKICAgIGFwcGx5KCB2cCwgY2FsbCApOwogICAgcmV0dXJuIDA7Cn0=