1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
#include <unordered_map>
#if 0
template<typename Type>
Type const &smaller(Type const &first, Type const &second)
{
return second < first ? second : first;
}
#else
// compile with g++ --std=c++2a -fconcepts min.cc
template <typename Type>
concept bool HasOpSmaller()
{
return requires(Type lhs, Type rhs)
{
lhs < rhs;
};
}
template<HasOpSmaller Type>
Type const &smaller(Type const &first, Type const &second)
{
return second < first ? second : first;
}
#endif
int main()
{
std::unordered_map<int, int> umap;
smaller(umap, umap);
}
|