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
|
template <typename Type>
concept bool Comparable() // function concept
{
return
requires(Type lhs, Type rhs)
{
operator<(lhs, rhs);
};
}
template <typename Type>
concept bool Comparable2 = // variable concept
requires(Type lhs, Type rhs)
{
operator<(lhs, rhs);
};
template<Comparable Type> // concept names can be function
Type const &min(Type const &x, Type const &y) // and variable concepts
{
return y < x ? y : x;
}
template<Comparable2 Type>
Type const &min(Type const &x, Type const &y)
{
return y < x ? y : x;
}
template<typename Type> requires Comparable2<Type> // cannot be fun. con.
Type const &min2(Type const &x, Type const &y)
{
return y < x ? y : x;
}
|