Tự động ràng buộc C++20&& không phải là "tài liệu tham khảo phổ quát"

lập trình


“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

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

コメント

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