Dấu ngoặc đơn trống (()
) sẽ chỉ làm cho nó trở thành khai báo hàm nếu được viết như vậy trong mã nguồn.
§14.5.3 [temp.variadic] p6
cũng đề cập đến điều này:
Các instantiation của một mở rộng gói đó không phải là một sizeof ... biểu hiện tạo ra một danh sách E1, E2, ..., EN, trong đó N là số phần tử trong các thông số mở rộng gói. [...] Khi N bằng 0, sự khởi tạo của việc mở rộng tạo ra một danh sách trống. Sự diễn giải như vậy không làm thay đổi cách diễn giải cú pháp của cấu trúc kèm theo, ngay cả trong trường hợp bỏ qua danh sách hoàn toàn nếu không sẽ bị hình thành hoặc sẽ dẫn đến sự mơ hồ trong ngữ pháp. [Ví dụ:
template<class... T> struct X : T... { };
template<class... T> void f(T... values) {
X<T...> x(values...);
}
template void f<>(); // OK: X<> has no base classes
// x is a variable of type X<> that is value-initialized
-end dụ]
Xem đặc biệt là bình luận thứ hai trong các mã ví dụ.
ohh sao tôi có thể bỏ lỡ điều đó! cảm ơn :-) –