 <p>If you're changing the data directed by the iterator, you're changing the list.</p> <blockquote> <p>The idea that I'm trying to express here, of course, is that the passed in list cannot/willnot be changed, but once I make the list reference const I then have to use 'cons_iterator's which then prevent me from doing anything with the result.</p> </blockquote> <p>What is "dong anything"? Modifying the data? That's changing the list, which is contradictory to your original intentions. If a list is const, it (and "it" includes its data) is constant.</p> <p>If your function were to return a non-const iterator, it would create a way of modifying the list, hence the list wouldn't be const.</p>