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 requirements
template<typename T>
concept is_summable = requires(T x, T y) { x + y; };        //  two parameter version

template<is_summable T>                                     //  the usage of one parameter version
void foo(T input)
{

}

template<class T1, class T2>
requires(is_summable<T1, T2>)                               //  the usage of two parameter version
{

}

--
Jimmy Hu

Dec. 19, 2023

Email: s103360021@gmail.com