https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120325
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- I'll comment on github too, but I think the problem is that you're using -DCMAKE_CXX_STANDARD=20 It looks to me like LLVM's iterator facade is completely incompatible with C++20. The operator overloads like operator- and operator+ should be constrained using requires BaseT::IsRandomAccess and operator-- should be constrained with requires BaseT::IsBirectional If the facade provides those operators, then obviously the iterator is going to look like it supports those operations when concepts like std::random_access_iterator are checked. So until LLVM is made C++20-compatible, don't try to build it as C++20.