https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121245
--- Comment #3 from 康桓瑋 <hewillk at gmail dot com> ---
(In reply to Patrick Palka from comment #1)
> I thought that too about _InputIterator constraints, but it seems it's
> allowed by [container.reqmnts]/69:
>
> The behavior of certain container member functions and deduction guides
> depends on whether types qualify as input iterators or allocators.
> The extent to which an implementation determines that a type cannot be
> an input iterator is unspecified, except that as a minimum integral
> types shall not qualify as input iterators.
But it is inconsistent with the constraints of the corresponding member
function of std::flat_map, which requires __has_input_iter_cat.
If libstdc++ intends to make these seemingly-legacy-iterator-pair members
support C++20 iterators, then at least we may need to do things differently
depending on the iterator system, for example:
if constexpr (input_iterator<_InputIterator>) {
// perform ranges::xxx operations
}
else if constexpr (__has_input_iter_cat<_InputIterator>) {
// perform std::xxx operations
}