Hi, MSVC 14.1 (_MSC_FULL_VER=191225834) in C++17 mode (_MSVC_LANG=201704L) is having a regression when compiling Boost.PolyCollection tests: http://www.boost.org/development/tests/develop/developer/output/teeks99-09-p... The problem happens in this seemingly innocent context (https://github.com/boostorg/poly_collection/blob/654018c7ce14674a1c0527206ad... ): template< typename ForwardIterator1,typename ForwardIterator2,typename Predicate > bool operator()( ForwardIterator1 first1,ForwardIterator1 last1, ForwardIterator2 first2,Predicate pred)const { ... using difference_type= typename std::iterator_traits<ForwardIterator1>::difference_type; difference_type l1=std::distance(first1,last1); // syntax error (wrongly) signalled here Is there some kind soul with access to this compiler who'd like to try the following workarounds and report the results? // workaround 1 using difference_type= typename std::iterator_traits<ForwardIterator1>::difference_type; typename difference_type l1=std::distance(first1,last1); // workaround 2 typedef typename std::iterator_traits<ForwardIterator1>::difference_type difference_type; difference_type l1=std::distance(first1,last1); Thank you! Joaquín M López Muñoz