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

            Bug ID: 117154
           Summary: Aggregate initialization with protected destructor in
                    Base class: GCC vs Clang difference
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: carlosgalvezp at gmail dot com
  Target Milestone: ---

Hi,

Consider this code:

struct Base
{
 protected:
    ~Base() = default;
};

struct Derived : Base
{};

int main()
{
    Derived d{};
}

https://godbolt.org/z/eh19eorGG

Compiled in C++17 mode, Clang rejects the code:

<source>:12:15: error: temporary of type 'Base' has protected destructor
   12 |     Derived d{};
      |               ^
<source>:4:5: note: declared protected here
    4 |     ~Base() = default;
      |     ^

While GCC is fine with it. This was filed as an issue to Clang, but the
response was that this was intended behavior:

https://github.com/llvm/llvm-project/issues/81089#issuecomment-1998568533

I'm curious to hear GCC's opinion on the matter, why doesn't GCC reject the
code? It'd be good if both compilers agreed on whether the code is ill-formed
or not.

Reply via email to