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() {}
template void 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);