Change pos1 and pos2 to iterators:
list<Object> intersection( const list<Object> & L1, const list<Object> & L2){
std::list<Object> result;
std::list<Object>::iterator pos1 = L1.begin(), pos2 = L2.begin();
while (pos1 != L1.end() && pos2 != L2.end()) {
if (*pos1 > *pos2) {
pos1++;
...
pos1 = L1.begin()points pos1to the first element of L1.
++pos1 moves the iterator forward to the next element
*pos1 gets the item from pos1
pos1 != L1.end() , pos1 . pos1, pos1 == L1.end().