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

            Bug ID: 116206
           Summary: No failure when all C++20 prospective destructors are
                    not viable when templated class definition is
                    instantiated
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mital at mitalashok dot co.uk
  Target Milestone: ---

https://godbolt.org/z/f7bcazeo9

  template<typename T>
  struct X {
    ~X() requires(sizeof(T) == 2);
  };
  void adl(X<char>*);
  int main() {
    sizeof(X<char>);
    adl((X<char>*) nullptr);
  }

Either of the two lines in `main` should cause an error, but GCC accepts this.

https://eel.is/c++draft/class.dtor#4

> At the end of the definition of a class, overload resolution
> is performed among the prospective destructors declared in
> that class with an empty argument list to select the
> *destructor* for the class, also known as the
> *selected destructor*. The program is ill-formed if overload
> resolution fails.
  • [Bug c++/116206] New: No failur... mital at mitalashok dot co.uk via Gcc-bugs

Reply via email to