#include <compare>              
#include <initializer_list>     
namespace std {
  
  template<class Key, class Compare = less<Key>, class KeyContainer = vector<Key>>
    class flat_set;
  struct sorted_unique_t { explicit sorted_unique_t() = default; };
  inline constexpr sorted_unique_t sorted_unique{};
  template<class Key, class Compare, class KeyContainer, class Allocator>
    struct uses_allocator<flat_set<Key, Compare, KeyContainer>, Allocator>;
  
  template<class Key, class Compare, class KeyContainer, class Predicate>
    constexpr typename flat_set<Key, Compare, KeyContainer>::size_type
      erase_if(flat_set<Key, Compare, KeyContainer>& c, Predicate pred);
  
  template<class Key, class Compare = less<Key>, class KeyContainer = vector<Key>>
    class flat_multiset;
  struct sorted_equivalent_t { explicit sorted_equivalent_t() = default; };
  inline constexpr sorted_equivalent_t sorted_equivalent{};
  template<class Key, class Compare, class KeyContainer, class Allocator>
    struct uses_allocator<flat_multiset<Key, Compare, KeyContainer>, Allocator>;
  
  template<class Key, class Compare, class KeyContainer, class Predicate>
    constexpr typename flat_multiset<Key, Compare, KeyContainer>::size_type
      erase_if(flat_multiset<Key, Compare, KeyContainer>& c, Predicate pred);
}