[英]C++ concepts and std::cout
为了学习C ++概念,我尝试重新创建一个EqualityComparable概念。 这是我写的代码
#include <iostream>
template<typename T>
concept bool EqualityComparable = requires(T a, T b)
{
{a == b};
{a != b};
};
void foo(EqualityComparable a, EqualityComparable b)
{
//auto t = a == b;
//std::cout << t; //Case 1 : This compiles
std::cout << a == b; //Case 2 : This does not
}
int main()
{
foo(4,2);
}
这个想法很简单,它有一个带有两个参数的foo函数,它们支持运算符==
和!=
但是,当我使用时,我尝试在对std::cout
的调用中直接比较a
和b
,我得到以下编译器错误
main.cpp:在'void foo(auto:1,auto:1)[with auto:1 = int]'的实例中:main.cpp:19:12:从此处需要main.cpp:14:20:error: 'operator =='不匹配(操作数类型为'std :: basic_ostream'和'int')
正如我在评论中所说,如果我先比较a和b然后再调用std :: cout,一切正常。 所以我的问题是我:为什么gcc会在情况2中将我的类型推导为std::basic_ostream
和int
? 我用coliru用以下参数编译代码
g ++ -std = c ++ 1z -O2 -fconcepts -Wall -pedantic -pthread main.cpp && ./a.out
因为运算符<<
优先级高于运算符==
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.