I want to make sure I properly understand the constraint normalization process since cppreference is slightly fuzzy on this topic.
It seems that during the normalization, anything that is inside of a requires expression is always considered an atom, no matter how specific/complex.
This seems to be supported by the different handling of:
template<typename T>
concept Decrementable = requires(T t) { --t; };
template<typename T>
concept RevIterator = Decrementable<T> && requires(T t) { *t; };
template<typename T>
concept RevIterator2 = requires(T t) { --t; *t; };
Where Decrementable < RevIterator but Decrementable and RevIterator2 are not ordered.
So, is this correct? Or can someone point me to the specific part of the standard that talks about this?