diff --git a/immer/detail/hamts/champ.hpp b/immer/detail/hamts/champ.hpp index 77cf7e47..30075d6b 100644 --- a/immer/detail/hamts/champ.hpp +++ b/immer/detail/hamts/champ.hpp @@ -34,10 +34,11 @@ struct champ node_t* root; size_t size; - static node_t* empty() + static node_t*& empty() { - static const auto node = node_t::make_inner_n(0); - return node->inc(); + static auto node = node_t::make_inner_n(0); + node->inc(); + return node; } champ(node_t* r, size_t sz = 0) diff --git a/immer/detail/rbts/rrbtree.hpp b/immer/detail/rbts/rrbtree.hpp index 9288670b..4e67710a 100644 --- a/immer/detail/rbts/rrbtree.hpp +++ b/immer/detail/rbts/rrbtree.hpp @@ -47,16 +47,18 @@ struct rrbtree ipow((size_t{1} << B) - 2, (S - BL) / B); } - static node_t* empty_root() + static node_t*& empty_root() { - static const auto empty_ = node_t::make_inner_n(0u); - return empty_->inc(); + static auto empty_ = node_t::make_inner_n(0u); + empty_->inc(); + return empty_; } - static node_t* empty_tail() + static node_t*& empty_tail() { - static const auto empty_ = node_t::make_leaf_n(0u); - return empty_->inc(); + static auto empty_ = node_t::make_leaf_n(0u); + empty_->inc(); + return empty_; } template