add normal_iterator funcs, and a member type test