занятно: constexpr + mutable
От: Sm0ke Россия ksi
Дата: 08.09.23 22:12
Оценка: 3 (1) -1 :)
constexpr + mutable (можно менять значение compile time константы)

Узнал об этом из этого видео:
  yt
https://www.youtube.com/watch?v=67DenIV45xY

И решил проверить: https://godbolt.org/z/r174GdMn9
#include <iostream>

struct t_const_mut
{
  // data
  mutable int
  value;

  constexpr int
  get() const
  { return ++this->value; }
};

constexpr const t_const_mut
g_obj{0};

int main()
{
  std::cout
  << g_obj.get() << ' '
  << g_obj.get() << '\n';
  
  return 0;
}


Результат:

Program returned: 0
1 2


Пока не придумал как это можно использовать. Просто занятный факт.

p/s gblt
При попытке вызвать t_const_mut::get() в consteval контексте компилятор от vs выдаёт Internal compiler error.
В то время как clang и gcc этого делать не позволяет, ссылаясь на чтение mutable мембера в compile-time. (или на изменение внешнего объекта, видимого за пределами метода)
Отредактировано 08.09.2023 22:22 Sm0ke . Предыдущая версия . Еще …
Отредактировано 08.09.2023 22:17 Sm0ke . Предыдущая версия .
Отредактировано 08.09.2023 22:14 Sm0ke . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.