https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102358

            Bug ID: 102358
           Summary: niter_base and miter_base overloaded for move_iterator
                    missing constexpr
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hewillk at gmail dot com
  Target Milestone: ---

stl_iterator.h#L2416:

  template<typename _Iterator>
    auto
    __niter_base(move_iterator<_Iterator> __it)
    -> decltype(make_move_iterator(__niter_base(__it.base())))
    { return make_move_iterator(__niter_base(__it.base())); }

  template<typename _Iterator>
    auto
    __miter_base(move_iterator<_Iterator> __it)
    -> decltype(__miter_base(__it.base()))
    { return __miter_base(__it.base()); }

They seem to be missing constexpr:

#include <algorithm>
#include <array>

constexpr bool b = [] {
  std::array<int, 2> in{}, out{};
  std::move(std::move_iterator(in.begin()), std::move_iterator(in.end()),
out.begin());
  return true;
}();

https://godbolt.org/z/PTrTnxTnK

Reply via email to