template class list { public: void add(T& v); void del(int i); void find(T& v); template void find_if(U functor); }; template class list_proxy { list& list_; public: list_proxy(list& l): list_(l) {}; void add(T& v){throw std::string("resticted");} void del(int i){throw std::string("resticted");} const T find(T& v){return list_.find(v);} template const T& find_if(U functor){return list_.find_if(functor); } };