C++ Logo


Advanced search

Re: Constexpr destructors standard library update omission

From: Thiago Macieira <thiago_at_[hidden]>
Date: Thu, 16 Jul 2020 14:26:39 -0700
On Thursday, 16 July 2020 13:54:24 PDT Maciej Cencora wrote:
> As far as I understand the latest C++ draft, constexpr destructor doesn't
> make the type trivial. It is just that constexpr destructor is allowed to
> be called in constexpr context (while in previous C++ standards only types
> with trivial destructors were allowed in constexpr context).

Sorry, I misspoke. I didn't mean it was a trivial type. I meant it was a
*literal* type.


Specifically, "a type is a literal type if ... it has a constexpr destructor"
Changed from C++17 that required trivial.

Literal types are required (but not sufficient condition) for constexpr

> So I guess this would fail to compile, because such a global would still
> require a runtime registration of the destructor during initialization.

I think it would succeed in compiling but, despite the constexpr destructor,
would always emit a dynamic initialiser to destroy this object dynamically. I
think it makes sense, as any non-trivial destructor is necessarily doing
something, so it must be run

I'd like a "don't destroy" marker to go along constinit.

Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel System Software Products

Received on 2020-07-16 16:30:00