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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ppalka at gcc dot gnu.org

--- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Reduced:

template<class T> concept range = requires (T t) { t.begin(); };

struct string_view {
  string_view(const char*);
  template<range R> string_view(R &&);
  const char* begin();
  const char* end();
};

struct my_string {
    char* ptr;
    operator string_view () const;
    auto begin() const { return string_view(*this).begin(); }
    auto end() const { return string_view(*this).end(); }
};

static_assert(range<my_string>);

This might be an "ill-formed, no diagnostic required" situation. A workaround
is to declare begin()/end() with the concrete return type
std::string_view::iterator.

Reply via email to