C++20 विवश ऑटो&& नहीं "सार्वभौमिक संदर्भ"

प्रोग्रामिंग


“con” अवधारणा से पहले “auto&&” एक “सार्वभौमिक संदर्भ नहीं है जैसा कि नीचे दिखाया गया है। “con auto&&” को “auto&&” में बदलकर बाधा को हटा दें और यह एक “सार्वभौमिक संदर्भ” है (कोई संकलन त्रुटि नहीं)। क्या कोई कृपया समझा सकता है क्यों?

सी++
#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をコピーしました