traits comes before non-const iterator because it may not have a default in the case of VC++ [SVN r7645]
except for changing the name to iterator_adaptor [SVN r7644]