#include #if 0 template Type const &smaller(Type const &first, Type const &second) { return second < first ? second : first; } #else // compile with g++ --std=c++20 -fconcepts min.cc template concept bool HasOpSmaller() { return requires(Type lhs, Type rhs) { lhs < rhs; }; } template Type const &smaller(Type const &first, Type const &second) { return second < first ? second : first; } #endif int main() { std::unordered_map umap; smaller(umap, umap); }