2013-10-04 15 views
8
struct { int a, b; } f(int x, int y) // OK 
{ 
    return { x, y }; 
} 

auto g(int x, int y) -> struct { int a, b; } // error C2332 
{ 
    return { x, y }; 
} 

int main() 
{ 
    auto n = f(1, 2).a; // OK 
} 

Trình biên dịch của tôi là VC++ 2013 RC.Tại sao cấu trúc không được đặt tên không được sử dụng làm loại trả về đuôi?

Tại sao g sai trong khi f là OK?

Đây có phải là lỗi của VC++ không?

+0

Bạn có chắc là bạn đang biên soạn C++ này chứ không phải C? –

+0

@Jesse, Có. Tôi biên dịch nó trong C++. Nếu không, 'auto' cũng sẽ kích hoạt lỗi trình biên dịch. – xmllmx

+0

@xmllmx Um, không. 'auto' là một thông số thời gian lưu trữ hợp lệ trong C. –

Trả lời

11

Thực ra, trong C++, việc xác định loại trong tham số hoặc kiểu trả về, có tên hay không là bất hợp pháp. Xem C++ 11 [diff.decl]:

Thay đổi: Trong C++, các loại có thể không được định nghĩa lại hoặc tham số loại. Trong C, các định nghĩa loại này được phép

Vì vậy, vấn đề thực tế là trường hợp đầu tiên được chấp nhận, không phải vấn đề thứ hai bị từ chối.

+0

Và clang ++ 3.4 chẩn đoán một lỗi cho cả hai phiên bản. – dyp

+0

GCC 4.8.1 trong chế độ C++ 03 [từ chối nó] (http://ideone.com/U1OdiR) –

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