Скажем, у меня есть std::optional<T>
. Я сбрасываю и присваиваю значение несколько раз. Является ли адрес значения (когда присутствует) всегда одинаковым для данного необязательного?
Другими словами:
#include <cassert>
#include <optional>
#include <string>
template<typename T>
auto test()
{
auto opt = std::optional<T>{T{}};
auto* ptr = &*opt;
opt.reset();
opt = T{};
assert(ptr == &*opt); // Can this assert fail?
}
int main()
{
test<int>();
test<double>();
test<std::string>();
// ...
}
Является ли стандарт гарантией стабильности адреса значения?