[ad_1]
“auto&&” đứng trước khái niệm “con” không phải là “tham chiếu chung như hiển thị bên dưới. Xóa ràng buộc bằng cách thay đổi “con auto&&” thành “auto&&” và đó là “tham chiếu chung” (không có lỗi biên dịch). Ai đó có thể vui lòng giải thích Tại sao?
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" }
Những gì tôi đã thử:
Tìm kiếm trên Internet cho trường hợp cụ thể được mô tả ở đây.
Giải pháp 1
Có lẽ điều này: Các ràng buộc và khái niệm (kể từ C++ 20) – cppreference.com[^].
Giải pháp 2
Trong mã của bạn:
template<typename t> concept con = std::is_class_v<t> && std::derived_from<t, base>;
Tôi đoán là nên Base
thay vì base
[ad_2]
コメント