Các mã sau biên dịch tốt với g ++, nhưng không phải với kêu vang ++ (3.6):kêu vang ++ lỗi trên tuyên bố mẫu tham số mặc định cuối
// Forward declaration:
template <class S, class T>
struct Base;
template <class T>
struct BaseFriend {
friend struct Base<int, T>;
};
// Actual declaration:
template <class S, class T = int>
struct Base {
void foo() {}
};
struct DerivedFriend : BaseFriend<int> {};
struct Derived : Base<int> {
void foo(int) {
Base<int>::foo();
}
};
Lỗi xảy ra trong định nghĩa Derived::foo
:
error: too few template arguments for class template 'Base'
Base<int>::foo();
^
test.cpp:3:8: note: template is declared here
struct Base;
^
Lỗi đi sau vài bản sửa lỗi nhỏ, như:
- Nếu thông số mẫu mặc định được xác định trong chuyển tiếp khai báo thay vì khai báo thực tế.
- Hoặc nếu
DerivedFriend
không được sử dụng.
Nhưng điều gì sai với mã gốc?
này trông giống như một lỗi kêu vang. – aschepler
Nộp một [báo cáo lỗi] (https://llvm.org/bugs/) - điều này khá rõ ràng là một lỗi clang, như GCC 4.9, ICC 13 và MSVC 17 (VS2012) tất cả chấp nhận mã. – LThode
Báo cáo lỗi đã được gửi https://llvm.org/bugs/show_bug.cgi?id=23303 –