Các "khấu trừ Mẫu luận cho lớp mẫu" đề nghị (P0091R2) chứa các ví dụ sau:"Khấu trừ đối số mẫu cho các mẫu lớp" có phải suy ra các gói tham số trống cho các mẫu lớp variadic không?
template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>
(Ngoài thực tế là định nghĩa constructor thiếu cơ thể), ví dụ dường như đề xuất rằng một mẫu lớp học variadic được xây dựng với đối số bằng không sẽ được suy luận với gói tham số trống.
Thật không may, phiên bản mới nhất của g ++ không đồng ý:
int main()
{
X x1{1};
X x11;
}
In function 'int main()':
error: invalid use of template-name 'X' without an argument list
X x11;
^
note: class template argument deduction requires an initializer
tôi không thể tìm cách diễn đạt rõ ràng trong đề xuất rằng làm rõ tương tác này. Có phải g ++ sai ở đây không?
'X x11 {};' hoạt động. – ildjarn
Tôi muốn nói việc triển khai gcc đang ở giai đoạn thử nghiệm ngay bây giờ. tức là 'vectơ v {2,3}' hoạt động, nhưng 'vectơ v {2,3,4}' tạo ra một lỗi mà ''int' không phải là một lớp, cấu trúc, hoặc kiểu nghiệp đoàn'. – krzaq
@krzaq: có vẻ như nó cố gắng gọi [hàm tạo (2)] (http://en.cppreference.com/w/cpp/container/vector/vector) cho trường hợp cụ thể đó. Tôi tự hỏi nếu điều này thực sự có ý định * (nghĩa là các quy tắc về sự định hướng trong những trường hợp này) *. Nhân tiện, tôi biết rằng gcc đang ở giai đoạn thử nghiệm - sở thích của tôi là gửi báo cáo lỗi khi thích hợp. –