Theo MSVC, gcc và kêu vang, đoạn mã sau là bất hợp pháp:Sử dụng một lớp mẫu trong một hàm mẫu với tham số tài liệu tham khảo phổ
template <typename T>
void f(T&& e) {
std::vector<T> v;
// do something with v and e ...
}
int main() {
int i;
f(i);
}
sản lượng msvc
xmemory0 (591): Lỗi C2528: 'con trỏ': con trỏ để tham chiếu là bất hợp pháp
gcc và clang cung cấp các thông báo lỗi tương tự. Lưu ý rằng tham số tham chiếu phổ dụng e
không được sử dụng. Trình biên dịch rõ ràng là thất bại trong việc nhanh chóng các vector v
, phàn nàn về nó được sử dụng với một tham chiếu đến int
:
lưu ý: xem tham chiếu đến lớp mẫu instantiation
'std::vector<T,std::allocator<_Ty>>'
được biên soạn với[ T=int &, _Ty=int & ]
Nhưng tôi không thể thấy nơi mẫu chức năng f
được khởi tạo với tham chiếu đến int
.
Ai đó có thể giải thích các lỗi trình biên dịch mà chúng ta thấy ở đây?
Lưu ý rằng * tham chiếu chuyển tiếp * hiện là thuật ngữ ưa thích. – TartanLlama