Các đoạn mã sau đây không biên dịch trên gcc-4.7.1:Có thể đặt tham số mẫu mặc định được đặt trước thông số mẫu mặc định không?
struct X {};
template <class T = X, typename U>
void f(const U& m) {
}
int main() {
f<>(0);
}
Tuy nhiên, điều này không:
struct X {};
template <class T = X, typename U>
void f(const U& m) {
auto g = []() {};
}
int main() {
f<>(0);
}
gcc-4.7.1 phàn nàn:
c.cpp: In function 'void f(const U&)':
c.cpp:5:15: error: no default argument for 'U'
Vì vậy, câu hỏi của tôi là: đang đặt các tham số mặc định trước khi các tham số không mặc định chính xác trong mẫu chức năng? Nếu có, tại sao không biên dịch thứ hai? Nếu không, tại sao người đầu tiên biên dịch? Tiêu chuẩn C++ 11 nói về cú pháp này như thế nào?
http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates – Andrew
@Andrew, bài đăng bạn đã đưa quá dài. Bạn có thể chỉ ra câu trả lời nào nói về nếu nó là chính xác để đặt tham số mặc định trước những người không mặc định? –
@icando: Không có gì trong tiêu chuẩn mà * cấm * đặt các đối số mẫu mặc định cho các mẫu hàm ở bất kỳ đâu. Chỉ các mẫu * lớp * bị hạn chế. –