Useless seek() if size is given.
Ugly. What about having a size() member method and do something like : 
if(size<0)
  size = this->size();