[ad_1]
“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
[ad_2]
コメント