Tôi nhận được lỗi biên dịch khi cố gắng gọi hàm tạo lớp cơ sở trong danh sách khởi tạo bắt nguồn khi sử dụng thông số mẫu mẫu với CRTP.clang ++ không chấp nhận sử dụng tham số mẫu mẫu khi sử dụng CRTP
Vấn đề có thể được nhân rộng với đoạn mã này:
template <template<class> class Derived, class T>
struct base
{
};
template <class T>
struct derived : public base<derived, T>
{
derived()
: base<derived, T>()
{ }
};
Các lỗi vi phạm Thông tin về:
bug.cpp:10:16: error: template argument for template template parameter must be a class template or type alias template
: base<derived, T>()
^
bug.cpp:10:11: error: expected class member or base class name
: base<derived, T>()
^
bug.cpp:10:11: error: expected '{' or ','
3 errors generated.
Vấn đề này chỉ xuất hiện xảy ra trên kêu vang (3.4), không g ++ (4.8, 4.7, 4.6). Tôi đang biên dịch với -std = C++ 11 cũng.
Đây là lần đầu tiên tôi cần sử dụng CRTP với thông số mẫu mẫu. Tôi làm điều này được không và đó là một vấn đề với clang ++ hay không?
Tôi đã phát triển để tin tưởng các thông báo lỗi clang ++ nhiều hơn g ++ vào cuối!
+1 Không biết rằng điều này đã thay đổi trong C++ 11. Bạn có thể muốn cung cấp giải pháp thay thế mà tôi có trong câu trả lời đã xóa. –
@ DavidRodríguez-dribeas: đừng lo, tiêu chuẩn mới vẫn làm tôi ngạc nhiên thường xuyên. –
Tôi không lo lắng, ngược lại tôi đã học được điều gì đó. Tôi sẽ lo lắng về ngày tôi không học bất cứ điều gì mới :) –