繁体   English   中英

C ++概念和std :: cout

[英]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的调用中直接比较ab ,我得到以下编译器错误

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_ostreamint 我用coliru用以下参数编译代码

g ++ -std = c ++ 1z -O2 -fconcepts -Wall -pedantic -pthread main.cpp && ./a.out

因为运算符<<优先级高于运算符==

运算符优先级

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM