use iterator_traits to deduce type info
Merge branch 'traits' into development