MSVC /std:c++20 报告约束自动&& 的错误如下所示
#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: no matching overloaded function found
}
Run Code Online (Sandbox Code Playgroud)
从“con auto&&”中删除“con”,上面的代码编译没有错误。我想了解为什么向 auto&& 模板参数添加约束会将其从“通用引用”更改为仅 R 值引用。此行为符合 C++20 标准还是 MSVC 独有的行为?
在互联网上搜索 C++ 论坛,没有找到任何解释这种特定语言用例的内容。然而,可能有一些我错过或没有注意到的事情。