types::none_type intersection_update(types::set<T> &set, Types const &... others) { set.intersection_update(others...); return {}; }
types::set<T> union_(types::set<T> const& set, Types const&... others){ return set.union_(others...); }
types::none_type difference_update(types::set<T> &set, Types const &... others) { set.difference_update(others...); return {}; }
types::none_type symmetric_difference_update(types::set<T> &set, U const &other) { set.symmetric_difference_update(other); return {}; }
bool issuperset(types::set<T> const& set, types::set<U> const& other){ return set.issuperset(other); }
void add(types::set<T> &s, F const& value) { s.add(value); }
void symmetric_difference_update(types::set<T> &set, U const &other) { set.symmetric_difference_update(other); }
typename __combined<types::set<T>, U>::type symmetric_difference(types::set<T> const &set, U const &other) { return set.symmetric_difference(other); }
typename __combined<types::set<T>, Types...>::type intersection(types::set<T> const &set, Types const &... others) { return set.intersection(others...); }
void discard(types::set<T> & set, U const& elem) { set.discard(elem); }
bool isdisjoint(types::set<T> const &calling_set, U const &arg_set) { return calling_set.isdisjoint(arg_set); }
bool issubset(types::set<T> const &set, U const &other) { return set.issubset(other); }
types::set<T> difference(types::set<T> const& set, Types const&... others){ return set.difference(others...); }
void difference_update(types::set<T> &set, Types const &... others) { set.difference_update(others...); }