2016-11-11 27 views
8

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 

example on wandbox


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?

+0

'X x11 {};' hoạt động. – ildjarn

+1

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

+0

@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. –

Trả lời

8

[dcl.type.class.deduct]/1:

Nếu một giữ chỗ cho một kiểu lớp suy luận xuất hiện như một decl-specifier trong decl-specifier-seq của một đơn giản tuyên bố, các init- người khai báo của tờ khai đó sẽ có dạng

declarationator-idthuộc tính-specifier-seq optinitializer

Các initializer là không bắt buộc.

+0

Rất đẹp. Đó là một trang web rất tiện dụng! –

+0

Vì vậy, 'X x11 {};' nên hoạt động? – Yakk

+4

@Yakk Có, mặc dù có vẻ như [họ đang chỉnh sửa điều] (https://twitter.com/AlisdairMered/status/797227816999743490) vì vậy có lẽ tôi sẽ phải chỉnh sửa sớm ... –

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