В каком практическом случае полезно использовать «const constinit»?

Ответ на этот вопрос от Vittorio Romeo очень хорошо объясняет. В его ответе упоминается следующее:

не эквивалентен, поскольку первое требует постоянного разрушения , а второе - нет.

Хотя это довольно ясно, я не вижу в этом практического применения. В этом случае const constinit использоваться, но constexprне мог. В любом случае, который я могу придумать, для любого типа T это может быть constinit и не может быть изменен во время выполнения с помощью const, постоянное разрушение должно быть тривиальным ограничением. Я что-то пропустил?

2 ответа

Если у вас есть зависимость от внешнего кода, который вы не можете изменить по какой-либо причине, и это выглядит так:

      struct A {
  ~A() {}
};

Это будет означать, что A не буквальный тип, потому что у него нет constexprдеструктор (скорее всего оплошность). Однако он может быть построен во время компиляции и, следовательно, может быть constinit.

Возможный практический случай:

      struct AtExit
{
    ~AtExit() { std::cout << "End"; }
};

Демо

(Более полезно при создании шаблона класса с функтором).

Другие вопросы по тегам