namespace boost {
template<typename Value, typename Hash = boost::hash<Value>,
typename Pred = std::equal_to<Value>,
typename Alloc = std::allocator<Value> >
class unordered_set;
template<typename Value, typename Hash, typename Pred, typename Alloc>
bool operator==(unordered_set<Value, Hash, Pred, Alloc> const&,
unordered_set<Value, Hash, Pred, Alloc> const&);
template<typename Value, typename Hash, typename Pred, typename Alloc>
bool operator!=(unordered_set<Value, Hash, Pred, Alloc> const&,
unordered_set<Value, Hash, Pred, Alloc> const&);
template<typename Value, typename Hash, typename Pred, typename Alloc>
void swap(unordered_set<Value, Hash, Pred, Alloc>&,
unordered_set<Value, Hash, Pred, Alloc>&);
template<typename Value, typename Hash = boost::hash<Value>,
typename Pred = std::equal_to<Value>,
typename Alloc = std::allocator<Value> >
class unordered_multiset;
template<typename Value, typename Hash, typename Pred, typename Alloc>
bool operator==(unordered_multiset<Value, Hash, Pred, Alloc> const&,
unordered_multiset<Value, Hash, Pred, Alloc> const&);
template<typename Value, typename Hash, typename Pred, typename Alloc>
bool operator!=(unordered_multiset<Value, Hash, Pred, Alloc> const&,
unordered_multiset<Value, Hash, Pred, Alloc> const&);
template<typename Value, typename Hash, typename Pred, typename Alloc>
void swap(unordered_multiset<Value, Hash, Pred, Alloc>&,
unordered_multiset<Value, Hash, Pred, Alloc>&);
}