Semantically it is OK, 'auto&' will be deduced as 'T&' when operator* returns 'T&&'. But because operator* returning 'T&&' is weird, it'd be better to skip transformation altogether. This change LGTM with that comment added. http://llvm-reviews.chandlerc.com/D500 BRANCH loop_const ARCANIST PROJECT clang-tools-extra