template<typename _Can, typename _Predicate>
void do_something_to_all(_Can& __can, const _Predicate& __pred) {for (BOOST_AUTO(iter, __can.begin()); iter != __can.end(); ++iter) __pred(*iter);}
template<typename _Can>
size_t get_size_in_byte(const _Can& __can)
{
size_t size_in_byte = 0;
do_something_to_all(__can, size_in_byte += boost::lambda::bind(&_Can::value_type::size, boost::lambda::_1));
return size_in_byte;
}
std::list<std::string> can;
can.emplace_back("123");
can.emplace_back("456");
printf("%zu\n", get_size_in_byte(can));