constexpr + mutable (можно менять значение compile time константы)
Узнал об этом из этого видео:
И решил проверить:
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. (или на изменение внешнего объекта, видимого за пределами метода)