Actually, the way the code is now, if it detects a T&& return type from operator* it still uses 'auto &' in the for loop which compiles. I'm not sure if semantically this is ok. rvalue references still give me headaches:) http://llvm-reviews.chandlerc.com/D500