Điều này vừa xuất hiện trong ngữ cảnh another question.Điều gì có nghĩa là "sử dụng ODR" một cái gì đó?
Rõ ràng các hàm thành viên trong các mẫu lớp chỉ được khởi tạo nếu chúng được sử dụng ODR. Ai đó có thể giải thích chính xác điều đó có nghĩa là gì. wikipedia article on One Definition Rule (ODR) không đề cập đến "ODR-use".
Tuy nhiên tiêu chuẩn định nghĩa nó như
Một biến có tên xuất hiện như một biểu hiện khả năng đánh giá lại là ODR-sử dụng trừ khi nó là một đối tượng thỏa mãn các yêu cầu về xuất hiện trong một biểu thức hằng (5.19) và tỷ lệ chuyển đổi từ giá trị sang tỷ lệ (4.1) được áp dụng ngay lập tức.
trong [basic.def.odr].
Chỉnh sửa: Rõ ràng đây là phần sai và toàn bộ đoạn chứa nhiều định nghĩa cho những thứ khác nhau. Đây có thể là một trong những phù hợp cho chức năng lớp mẫu thành viên:
Một chức năng không bị quá tải mà tên tuổi xuất hiện như một biểu hiện khả năng đánh giá lại hoặc một thành viên của một tập hợp các ứng cử viên chức năng, nếu được lựa chọn bởi độ phân giải quá tải khi được gọi từ một biểu thức có thể đánh giá có khả năng được đánh giá là , trừ khi nó là một hàm ảo tinh khiết và tên của nó không đủ điều kiện.
Tôi chưa hiểu, quy tắc này hoạt động như thế nào trên nhiều đơn vị biên dịch? Tất cả các hàm thành viên có được khởi tạo nếu tôi khởi tạo một mẫu lớp một cách rõ ràng không?
Lưu ý rằng [basic.def.odr]/6 áp dụng cho các hàm thành viên của các mẫu lớp" Có thể có nhiều hơn một định nghĩa [...] " – dyp
*" Tất cả các hàm thành viên đều được khởi tạo nếu tôi nhanh chóng khởi tạo một mẫu lớp? "* Có, hãy xem [temp.explicit]/8 + 9 – dyp