Tôi đang cố nắm bắt đầy đủ cú pháp mẫu và ngữ nghĩa hơn bằng cách tưởng tượng các cấu trúc phức tạp. Tôi tin rằng cú pháp sau đây không được phép theo tiêu chuẩn C++ 11:Ở đâu trong tiêu chuẩn C++ 11 nó cấm 'mẫu <typename T> lớp A {...}; mẫu <typename T> lớp A <int> {...}; ' (nếu ở đâu)?
template <typename T>
class A
{...};
// phony "specialization"
template <typename T>
class A<int>
{...};
Tuy nhiên, tôi không thể tìm thấy trong tiêu chuẩn C++ 11 khi cú pháp này không được phép.
Tôi có đúng là cú pháp được hiển thị không được phép theo tiêu chuẩn C++ 11 không? Nếu vậy, có thể thấy rằng cú pháp không được phép ở đâu?
Đây là lỗi bạn gặp phải với lỗi clang ++: ": chuyên môn từng phần của 'A' không sử dụng bất kỳ tham số mẫu nào của nó". Vì vậy, tôi đoán bạn phải tìm kiếm phần về chuyên môn hóa một phần, liên quan đến việc sử dụng các tham số mẫu của nó. PS: g ++ chỉ nói "lỗi: các tham số mẫu không được khấu trừ trong chuyên môn từng phần:" – vsoftco
@vsoftco Giả sử bạn có 'mẫu lớp A {T t; }; ' –
@Yakk có thể câu trả lời là do thực tế là không thể cho phép cấu trúc có ý nghĩa rằng nó không được phép, hoặc thực tế là nó không được mô tả ở bất kỳ đâu như là một cấu trúc * được phép làm cho nó không được phép, thay vì nó đặc biệt không được phép ở bất cứ đâu. –