Is it done on purpose(lack of data() member function)? It prevents decaying from flat_set/flat_map to std::span which can be useful if we treate flat_set/flat_map as sorted vector.
Is it safe to make sth like that?
template<typename T>
std::span<const T> make_span(const std::flat_set<T>& fset)
{
return std::span<const T>{fset.empty() ? nullptr : std::addressof(*fset.begin()),
fset.size()};
}