D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(375): note: see reference to variable template 'bool WeaklyIncrementable<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(443): note: see reference to variable template 'bool Iterator<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/any_iterator.hpp(189): note: see reference to variable template 'bool InputIterator<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/move_constructible.hpp(41): note: see reference to variable template 'const bool is_constructible_v<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> > &>' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(30): note: see reference to variable template 'bool Constructible<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> > &>' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(39): note: see reference to variable template 'bool CopyConstructible<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(45): note: see reference to variable template 'bool Copyable<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(200): note: see reference to variable template 'bool Semiregular<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(206): note: see reference to variable template 'bool Sentinel<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(977): note: see reference to variable template 'bool SizedSentinel<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(537): note: see reference to alias template instantiation 'std::experimental::ranges::v1::iter_difference_t' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/operations.hpp(116): note: while compiling class template member function 'I std::experimental::ranges::v1::__next_fn::operator ()(I,incrementable_traits::difference_type) const'
The compiler first tries to see whether the following function is a valid candidate and evaluating ‘SizedSentinel’:
{ ++i } -> Same<I>&; // not required to be equality-preserving
endif
i++; // not required to be equality-preserving
};
template<class I>
META_CONCEPT Iterator =
__dereferenceable<I&> && WeaklyIncrementable<I>;
// Axiom?: i is non-singular iff it denotes an element
// Axiom?: if i equals j then i and j denote equal elements
// Axiom?: I{} is in the domain of copy/move construction/assignment
// (This should probably be a requirement of the object concepts,
// or at least Semiregular.)
I am compiling D:\Git\cmcstl2\test\iterator\any_iterator.cpp.
It can be triggered via:
stl2::iter_difference_t<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &, int, int &&> > >;
The (reversed) processing order is:
D:\Git\cmcstl2\include\stl2/detail/iterator/increment.hpp(61): error C2968: 'iter_difference_t<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >': recursive alias declaration
D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(375): note: see reference to variable template 'bool WeaklyIncrementable<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(443): note: see reference to variable template 'bool Iterator<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/any_iterator.hpp(189): note: see reference to variable template 'bool InputIterator<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/move_constructible.hpp(41): note: see reference to variable template 'const bool is_constructible_v<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> > &>' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(30): note: see reference to variable template 'bool Constructible<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::any_iterator::cursor<int &,int,int &&> > &>' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(39): note: see reference to variable template 'bool CopyConstructible<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/concepts/object/semiregular.hpp(45): note: see reference to variable template 'bool Copyable<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(200): note: see reference to variable template 'bool Semiregular<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> > >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(206): note: see reference to variable template 'bool Sentinel<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/basic_iterator.hpp(977): note: see reference to variable template 'bool SizedSentinel<std::experimental::ranges::v1::basic_iterator<std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >,std::experimental::ranges::v1::__any_iterator::cursor<int &,int,int &&> >' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/concepts.hpp(537): note: see reference to alias template instantiation 'std::experimental::ranges::v1::iter_difference_t' being compiled
D:\Git\cmcstl2\include\stl2/detail/iterator/operations.hpp(116): note: while compiling class template member function 'I std::experimental::ranges::v1::__next_fn::operator ()(I,incrementable_traits::difference_type) const'
The compiler first tries to see whether the following function is a valid candidate and evaluating ‘SizedSentinel’:
Semiregular then tries to see whether S is copy constructible:
Then end up trying this ctor of basic_iterator (inherited from cursor::mixin):
template explicit mixin(I i)
InputIterator circular references back to the iter_difference_t:
ifdef WORKAROUND_COMPOUND_REQUIREMENT
else
endif