The only parameters available to a concept are the template
parameters. The parameters to the requires expression, as in your
example, are not concept parameters. Note that a concept may be
defined that does not use a requires expression at all; or may use
more than one.
Tom.
Hi,
The meaning of function overloading is that two or more functions can have the same name but different parameters. In C++20, concept has been introduced. I think that the same logic should be applied to concepts in C++: two or more concepts can have the same name but different number of parameters, and the usage of concept depends on the number of given parameters.
Example:
template<typename T>concept is_summable = requires(T x) { x + x; }; // one parameter version// error: redefinition of concept 'is_summable' with different template parameters or requirementstemplate<typename T>concept is_summable = requires(T x, T y) { x + y; }; // two parameter versiontemplate<is_summable T> // the usage of one parameter versionvoid foo(T input){}template<class T1, class T2>requires(is_summable<T1, T2>) // the usage of two parameter version{}