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

            Bug ID: 94333
           Summary: internal compiler error: Segmentation fault ( when
                    trying use structure binding in requires(requires{}))
           Product: gcc
           Version: c++-concepts
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dmusiienko at gmail dot com
  Target Milestone: ---

template <class T>
struct has2param
{
    typedef char yes;
    typedef struct{char n[2];} no;
    template <class U>
    static yes check(U u) requires(requires{[](auto u){auto [a, b] = u;}(u);});
    static no check(...);
    static constexpr bool y = sizeof(check(T())) == sizeof(yes);
};

struct point
{
    int x;
    int y;
};

int main()
{
    point p{1, 2};
    constexpr bool ans = has2param<decltype(p)>::y;
    return 0;
}

---------------------------------------
x86-64 gcc(trunc) compiler output:
---------------------------------------

<source>: In instantiation of 'static has2param<T>::yes has2param<T>::check(U)
requires requires{(<lambda>)(has2param<T>::check::u);} [with U = point; T =
point; has2param<T>::yes = char]':

<source>:9:43:   required from 'constexpr const bool has2param<point>::y'

<source>:21:50:   required from here

<source>:7:45: internal compiler error: Segmentation fault

    7 |     static yes check(U u) requires(requires{[](auto u){auto [a, b] =
u;}(u);});

      |                                            
^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Please submit a full bug report,

with preprocessed source if appropriate.

See <https://gcc.gnu.org/bugs/> for instructions.
-----------------------------------------------------

I expected an error, but not the one I received (compiler segf)

Reply via email to