C++;如果原型是本地的,则使用流I/O的类型约束将失败 在下面的MCVE中,C++没有识别到“代码”> INT/C>> S可以用流I/O打印或打印,但它认为代码< A/COS> S不能,尽管原型代码代码/代码> > < /P>
如果我将原型和类设置为全局,那么问题就解决了(对于第二行输出,它将打印C++;如果原型是本地的,则使用流I/O的类型约束将失败 在下面的MCVE中,C++没有识别到“代码”> INT/C>> S可以用流I/O打印或打印,但它认为代码< A/COS> S不能,尽管原型代码代码/代码> > < /P>,c++,c++20,c++-concepts,C++,C++20,C++ Concepts,如果我将原型和类设置为全局,那么问题就解决了(对于第二行输出,它将打印11,而不是00) 显然,我会让原型正常地全球化。但我不知道范围规则如何让约束知道它是在哪里定义的,只要它是定义的。当原型是本地的时,它为什么不工作?在两个表达式中--In>>t和out>和操作符 #include <iostream> using namespace std; template<typename T> concept Readable = requires(std::istream
11
,而不是00
)
显然,我会让原型正常地全球化。但我不知道范围规则如何让约束知道它是在哪里定义的,只要它是定义的。当原型是本地的时,它为什么不工作?在两个表达式中--In>>t
和out>
和操作符
#include <iostream>
using namespace std;
template<typename T>
concept Readable = requires(std::istream& in, T& t)
{
in >> t;
};
template<typename T>
concept Printable = requires(std::ostream& out, T t)
{
out << t;
};
int main()
{
class A {};
ostream& operator<< (ostream&, const A&);
istream& operator>> (istream&, A&);
std::cout << Readable<int> << Printable<int> << '\n';
std::cout << Readable<A> << Printable<A> << '\n';
return 0;
}
11
00