[ad_1]
概念“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
也许这个: 约束和概念 (C++20 起) – cppreference.com[^]。
解决方案2
在你的代码中:
template<typename t> concept con = std::is_class_v<t> && std::derived_from<t, base>;
我想应该是 Base
代替 base
[ad_2]
コメント