2016-03-02 18 views
7

Đây có phải là C++ hợp pháp không?Có thể tham số của thông số mẫu mẫu gây ra đổ bóng không?

template <typename T, template <typename T> class> 
struct S { }; 

Clang (3.7.1) từ chối yêu cầu, phàn nàn thứ hai T bóng đầu tiên T. GCC dường như không quan tâm đến nó và tôi nghĩ điều đó là hợp lý. Tôi nghĩ rằng đó chỉ là số tham số quan trọng trong tham số mẫu mẫu.

+0

tại sao bạn cần sử dụng 'T' hai lần? nếu bạn muốn sử dụng 'T' trong khuôn mẫu thứ hai, bạn có thể viết' template class> ' –

+1

@DavidHaim Nó không bắt buộc, nhưng khi tham số đầu tiên được cho là tham số thứ hai, mẫu template, nó có ý nghĩa khi sử dụng cùng một tên (hoặc, ít nhất là tương tự) cho tham số mẫu lồng nhau. Đề xuất của bạn thú vị, tôi chưa bao giờ cố gắng chỉ định tham số mặc định cho tham số mẫu mẫu. Nó hoàn thành gì so với 'mẫu lớp>'? – nodakai

+0

Tôi tự hỏi động lực thúc đẩy những người tìm kiếm và tiêu diệt từ khóa trong tiêu đề bài đăng là gì? Họ có lẽ không kém phần nhiệt tình trong việc thay thế 'NULL' thành' nullptr'? – nodakai

Trả lời

7

số [temp.local]/6:

Một mẫu tham số không được redeclared trong phạm vi của nó (bao gồm cả phạm vi lồng nhau).

+0

Hmm, tôi mất một thời gian để nhận ra báo giá của bạn thực sự có liên quan đến trường hợp của tôi, nhưng đúng, nó chắc chắn là về "phạm vi lồng nhau". – nodakai

Các vấn đề liên quan