Các mã sau biên dịch trong Visual C++ 2013 nhưng không thuộc G ++ 4.8.2:chế biến các chức năng template uninstantiated
template<class T>
int MyFunc(T& t)
{
return static_cast<int>(CCodes::blah);
}
template<>
int MyFunc(float& t)
{
return 0;
}
int main() {
float f = 10.f;
return MyFunc(f);
}
Visual C++ dường như bỏ qua chức năng mẫu chung bởi vì chỉ có sự chuyên môn hóa MyFunc<float>
được sử dụng. G ++ phân tích cú pháp hàm chung và các điểm mà liệt kê CCodes chưa được xác định.
Điều gì là đúng? Hoặc là điều này được xác định thực hiện?
Trong cả hai cách, mã không đúng định dạng vẫn là mã không đúng định dạng. –
Vì vậy, tôi đoán câu hỏi của tôi có thể được viết lại: Đây có phải là mã không đúng định dạng không? Hoặc là trình biên dịch cho phép không phân tích các định nghĩa mẫu không được phân tích? – Tom
@Tom Điều gì xảy ra nếu bạn viết 'return static_cast (CCodes :: blah);'? –