#pragma once #include /* Concepts: * Container * RemovalContainer */ namespace NFlatHash::NConcepts { #define DCV(type) std::declval() #define DCT(object) decltype(object) template struct Container : std::false_type {}; template struct Container> : std::conjunction, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_same, std::is_copy_constructible, std::is_move_constructible, std::is_copy_assignable, std::is_move_assignable> {}; template constexpr bool ContainerV = Container::value; template struct RemovalContainer : std::false_type {}; template struct RemovalContainer> : std::conjunction, std::is_same> {}; template constexpr bool RemovalContainerV = RemovalContainer::value; #undef DCV #undef DCT } // namespace NFlatHash::NConcepts