C++ 概念定义中的多个模板参数

C++ 概念定义中的多个模板参数,c++,c++-concepts,C++,C++ Concepts,我有一个多模板参数的概念 template<typename T, typename U> EqualityComparable template equalitycompable 我能用这个吗 template< EqualityComparable T /* and U */ > void foo() {} templatevoid foo(){} 不知怎么的 作为一个例子,考虑这个片段 template <typename T, typename U&

我有一个多模板参数的概念

template<typename T, typename U> EqualityComparable
template equalitycompable
我能用这个吗

template< EqualityComparable T /* and U */ > void foo() {}
templatevoid foo(){}
不知怎么的

作为一个例子,考虑这个片段

template <typename T, typename U>
concept EqualityComparable = requires(T a, U b) {
        {a == b} -> bool;
        {a != b} -> bool;
};

template<EqualityComparable T /* and U */>
void foo (T,U) {} //can i make this work?

int main () {
    foo(1.0f,1);
}
模板
概念平等可比=需要(T a,U b){
{a==b}->bool;
{a!=b}->bool;
};
模板
void foo(T,U){}//我能做这个吗?
int main(){
foo(1.0f,1);
}
godbolt上的铿锵实验概念编译器告诉我

template<EqualityComparable T /* and U */> void foo(T,U) {}

--> error: concept 'EqualityComparable' requires more than 1 template argument; provide the remaining arguments explicitly to use it here
模板void foo(T,U){
-->错误:“EqualityCompable”概念需要多个模板参数;在此处显式提供其余参数以使用它
所以这似乎表明这是可能的?

这是可能的

template<typename A, typename B> requires EqualityComparable<T,U>
void foo_works(T,U) {}
模板需要EqualityCompable
void foo_works(T,U){}

但是我想知道它是否直接在
模板中工作

我认为这应该可以:

template<class T>
void foo_works(T, EqualityComparable<T> auto);

但是这种语法吓坏了保守派。

我只略过了一些概念,但我认为这是唯一的方法。Herb Sutter关于模板参数导入器的建议可以解决这个问题,但在合并到语言中之前需要更多的迭代
template<class T, EqualityComparable<T> U>
void foo_works(T,U);
template<class T,class U>
   requires EqualityComparable<T,U>
void foo_works(T,U);
EqualityComparable{T,U}
void foo_works(T,U);