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

--- Comment #8 from Steven Sun <StevenSun2021 at hotmail dot com> ---
under c++17

Step 4 needs `types_match == 1` [at 1] but, its value is zero, which is caused
by `function_requirements_equivalent_p` [at 3] returns 0 [at 2] .

[1]
https://gcc.gnu.org/git?p=gcc.git;a=blob;f=gcc/cp/decl.c;h=316ad4c1426940bd4f51197a6297eefc24064fec;hb=HEAD#l1481
[2]
https://gcc.gnu.org/git?p=gcc.git;a=blob;f=gcc/cp/decl.c;h=316ad4c1426940bd4f51197a6297eefc24064fec;hb=HEAD#l1052
[3]
https://gcc.gnu.org/git?p=gcc.git;a=blob;f=gcc/cp/decl.c;h=316ad4c1426940bd4f51197a6297eefc24064fec;hb=HEAD#l944
[4]
https://gcc.gnu.org/git?p=gcc.git;a=blob;f=gcc/cp/pt.c;h=36a8cb5df5d36337c18e1547e775b747f59a087f;hb=HEAD#l3510

In `function_requirements_equivalent_p` [at 3], the comparison is different for
cxx20 and before.

According to the comments, before c++20, only the combined constraints are
compaired.

--------------------------------------------------------------
By the way, for those two primary function templates in comment 1. Before
cxx20, they are regard as 

equivalent heads [at 4]
inequivalent requirements [at 3]

Since cxx20, they are regard as 

inequivalent heads [at 4]
equivalent requirements [at 3]

If I change both [3], [4], forcing cxx17 using cxx20 standard, everything
works.
-------------------------------------------------------------
Many invariants are broken here. They cause this bug together:

A failure in requirements comparison caused no reregistration, which leads to
overload between implicit instatntiation. The full specialzation is already
parsed, leaving a null `cfun` state. Then it tries to instatiate the function
body and everything crashes,

They are all `by design` in a sense. How to fix it is not only a technical
issue, but a design choice.

If any senior gcc developer sees this, help me.
-------------------------------------------------------------
By the way, I don't think this bug would matter too much, since no one really
uses concepts before c++20. I am just curious.

Reply via email to