tôi mong đợi đoạn mã sau để biên dịch:Sự tương tác giữa đối số mặc định và gói thông số (GCC và kêu vang không đồng ý)
#include <iostream>
template <class Tag = void, class T = int, class... Args>
void print(T val = T{}, Args... args) {
std::cout << val << ' ' << sizeof...(args) << std::endl;
}
int main() {
print();
print(3.14);
print(0, 1, 2);
}
Trong khi nó biên dịch trên GCC 5.2 (C++ 11) mặc dù unused-but-set-parameter
cảnh báo, Clang 3.6 (C++ 11) cung cấp các thông báo lỗi sau:
main.cpp:4:33: error: missing default argument on parameter 'args'
void print(T val = T{}, Args... args) {
^
main.cpp:11:5: note: in instantiation of function template specialization 'print<void, int, int, int>' requested here
print(0, 1, 2);
^
main.cpp:4:33: error: missing default argument on parameter 'args'
void print(T val = T{}, Args... args) {
^
2 errors generated.
Vì vậy, ai là đúng?
@RIAD Tôi cho rằng trường hợp mặc định cho 'args' là nó không tồn tại chút nào. – Lingxi
Có vấn đề cốt lõi về vấn đề này, IIRC. –
Đúng, [CWG 1609] (http://wg21.link/CWG1609). –