template < typename T > using sliter = typename std::list<T>::iterator ;auto fancy_size( std::list<int> lst ) // let the compiler figure out what the return type is
{
sliter<int> a = lst.begin() ; // use the template alias
auto b = lst.end() ; // let the compiler figure out what the type of the iterator is
return std::distance( a, b ) ;
}