shared/NoDefaultComparator.h (57 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include <type_traits> #include <utility> template <typename T> struct fake_dependency : public std::false_type {}; #define DISALLOW_DEFAULT_COMPARATOR(klass) \ namespace std { \ template <typename T, typename A> \ class map<const klass*, T, std::less<const klass*>, A> { \ static_assert(fake_dependency<T>::value, \ #klass \ " must not use default pointer comparison in std::map"); \ }; \ template <typename T, typename A> \ class multimap<const klass*, T, std::less<const klass*>, A> { \ static_assert( \ fake_dependency<T>::value, \ #klass " must not use default pointer comparison in std::multimap"); \ }; \ template <typename A> \ class set<const klass*, std::less<const klass*>, A> { \ static_assert(fake_dependency<A>::value, \ #klass \ " must not use default pointer comparison in std::set"); \ }; \ template <typename A> \ class multiset<const klass*, std::less<const klass*>, A> { \ static_assert( \ fake_dependency<A>::value, \ #klass " must not use default pointer comparison in std::multiset"); \ }; \ \ template <typename T, typename A> \ class map<klass*, T, std::less<klass*>, A> { \ static_assert(fake_dependency<T>::value, \ #klass \ " must not use default pointer comparison in std::map"); \ }; \ template <typename T, typename A> \ class multimap<klass*, T, std::less<klass*>, A> { \ static_assert( \ fake_dependency<T>::value, \ #klass " must not use default pointer comparison in std::multimap"); \ }; \ template <typename A> \ class set<klass*, std::less<klass*>, A> { \ static_assert(fake_dependency<A>::value, \ #klass \ " must not use default pointer comparison in std::set"); \ }; \ template <typename A> \ class multiset<klass*, std::less<klass*>, A> { \ static_assert( \ fake_dependency<A>::value, \ #klass " must not use default pointer comparison in std::multiset"); \ }; \ }