C++20 约束自动&& 不是 "通用参考"

编程


概念“con”前面的“auto&&”不是“通用引用”,如下所示。通过将“con auto&&”更改为“auto&&”来删除约束,它是“通用引用”(没有编译错误)。有人可以解释一下吗为什么?

C++
#include<concepts>
class Base { public: Base() {} };
class Derived : public Base { public: Derived() {} };
template<typename t>
concept con = std::is_class_v<t> && std::derived_from<t, base>;

void f(con auto&& x) {}

int main()
{
	f(Derived()); // r-value: Ok
	Derived d;
	f(d); // l-value: MSVC ERROR "no matching overloaded function found"
}

我尝试过的:

网上搜索一下这里描述的具体案例。

解决方案1

解决方案2

在你的代码中:

template<typename t>
concept con = std::is_class_v<t> && std::derived_from<t, base>;

我想应该是 Base 代替 base

コメント

タイトルとURLをコピーしました