message: Set::insert_any, Set::erase_any
diff: @@ -37,6 +37,8 @@ public:
  virtual void insert_null() = 0;
  virtual void erase_null() = 0;
  + virtual void insert_any(Mixed value) = 0;
  + virtual void erase_any(Mixed value) = 0;
  virtual void clear() = 0;
  protected:
  @@ -77,6 +79,8 @@ public:
  // Overriding members of SetBase:
  void insert_null() override;
  void erase_null() override;
  + void insert_any(Mixed value) override;
  + void erase_any(Mixed value) override;
  void clear() override;
  private:
  @@ -288,6 +292,22 @@ size_t Set<T>::insert(T value)
  return it.index();
  }
  +template <class T>
  +void Set<T>::insert_any(Mixed value)
  +{
  + if constexpr (std::is_same_v<T, Mixed>) {
  + insert(value);
  + }
  + else {
  + if (value.is_null()) {
  + insert_null();
  + }
  + else {
  + insert(value.get<typename util::RemoveOptional<T>::type>());
  + }
  + }
  +}
  +
  template <class T>
  size_t Set<T>::erase(T value)
  {
  @@ -311,6 +331,22 @@ size_t Set<T>::erase(T value)
  return it.index();
  }
  +template <class T>
  +void Set<T>::erase_any(Mixed value)
  +{
  + if constexpr (std::is_same_v<T, Mixed>) {
  + erase(value);
  + }
  + else {
  + if (value.is_null()) {
  + erase_null();
  + }
  + else {
  + erase(value.get<typename util::RemoveOptional<T>::type>());
  + }
  + }
  +}
  +
  template <class T>
  inline void Set<T>::insert_null()
  {
  