C++20 contraint auto&& pas un "référence universelle"

la programmation


“auto&&” précédé du concept “con” n’est pas une “référence universelle” comme indiqué ci-dessous. Supprimez la contrainte en remplaçant “con auto&&” par “auto&&” et c’est une “référence universelle” (pas d’erreur de compilation). Quelqu’un pourrait-il expliquer pourquoi ?

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"
}

Ce que j’ai essayé :

Recherche sur Internet du cas spécifique décrit ici.

Solution 1

Solution 2

Dans ton code :

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

Je suppose que ça devrait être Base au lieu de base

コメント

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