Можно после get_elem попробовать воткнуть std::atomic_thread_fence(std::memory_order_seq_cst);
Если мне не изменяет память, фенсы синхронизируются только с фенсами (в том числе с собой). Поэтому мне кажется без второго фенса при отпускании лока это не будет работать.