Chúng tôi đang ở lại một phần đất đặt hàng một lần nữa. Các loại các thông số chức năng mẫu tổng hợp là
T&& // #1: not a forwarding reference
const T& // #2
U&& // #3: a forwarding reference
các pre-phần đặt hàng chuyển đổi strips away referenceness và sau đó các top-level cv-qualification, để lại cho chúng ta một loại trần trong cả ba trường hợp. Nó sau đó trong tất cả ba trường hợp khấu trừ thành công trong cả hai hướng. Hiện chúng tôi đang trái với [temp.deduct.partial]/9 của sợi giây:
Nếu vì một loại nhất định, khấu trừ thành công trong cả hai chiều (ví dụ, các loại giống hệt nhau sau khi biến đổi ở trên) và cả P và A là loại tài liệu tham khảo (trước khi được thay thế bằng các loại gọi trên):
- nếu loại từ mẫu đối số là một giá trị trái tài liệu tham khảo và các loại từ các mẫu tham số được không, loại tham số không được coi là ít nhất là chuyên ngành như loại đối số; nếu không,
- nếu loại từ mẫu đối số có độ phân giải cao hơn loại từ mẫu tham số (như được mô tả ở trên), loại tham số không được coi là ít nhất .
Đối U&&
vs T&&
, không áp dụng quy tắc và không có trật tự. Tuy nhiên, đối với U&&
và const T&
, loại tham số U&&
không được coi là ít nhất là chuyên biệt làm loại đối số const T&
, cho mỗi dấu đầu dòng.
Đặt hàng một phần do đó tìm thấy số 2 để chuyên biệt hơn # 3, nhưng thấy số 1 và số 3 không thể phân biệt được. GCC là chính xác.
Điều đó nói rằng, điều này cũng có thể là sự giám sát trong các quy tắc đặt hàng một phần. Khấu trừ mẫu lớp là lần đầu tiên chúng tôi có một "tham chiếu rvalue tham số mẫu cv-unqualified đó không phải là một tham chiếu chuyển tiếp" điều. Trước đây, trong trường hợp tham chiếu kép, tham chiếu chuyển tiếp sẽ luôn bị mất tham chiếu rvalue không chuyển tiếp ở dấu đầu dòng thứ hai (vì cách duy nhất bạn nhận được tham chiếu rvalue không chuyển tiếp là nếu bạn có cv T&&
cho một số không rỗng cv
).
Nguồn
2017-06-03 17:29:14
Tôi sẽ thực hiện việc này. Khoản khấu trừ là cho một rvalue (tham khảo). 'ci' là một lvalue của' const', và có một constructor có tham chiếu đến 'const' như một tham số. –
Xin lỗi vì thiếu hiểu biết của tôi, nhưng cú pháp '-> này được gọi là như thế nào? – HolyBlackCat