2011-10-26 26 views
15

Các specifier không được chấp nhận có được chấp nhận trong hàm typedef không?specifier không được nhận dạng trong hàm typedefs

như trong:

typedef void (*fptr)() noexcept; 

trực giác, specifiers noexcept dường như có ý nghĩa vì chúng sẽ cho phép một số optimisations ở bên cạnh của người gọi.

Tôi nhận được câu trả lời hỗn hợp từ gcc 4.6.1.

typedef void (*fptr)() noexcept; 

kết quả trong: lỗi: ‘fptr’ tuyên bố với một đặc điểm kỹ thuật ngoại lệ

nhưng:

template<void (*FPtr)() noexcept> 
struct A{}; 

biên dịch mà không báo trước.

Trả lời

8

kêu vang cho:

test.cpp:1:25: error: exception specifications are not allowed in typedefs 
typedef void (*fptr)() noexcept; 
         ^
1 error generated. 

này được sao lưu trong các tiêu chuẩn C++ 11 trong 15,4 [except.spec]/p2:

... An exception-specification shall not appear in a typedef declaration or alias-declaration.

+0

Cảm ơn. Điều này có thể làm cho chấp nhận mệnh đề noexcept trong đối số mẫu ở trên một lỗi trong gcc? – mirk

+2

Tôi không nghĩ vậy. [temp.param]/p4 nói rằng các tham số không phải kiểu có thể là một con trỏ để hoạt động và tôi không thấy bất kỳ đề cập nào về các đặc tả ngoại lệ trong khu vực đó. Và [except.spec]/p2 đặc biệt nói rằng một đặc tả ngoại lệ có thể xuất hiện trên một con trỏ để hoạt động. –

+0

Cảm ơn bạn lần nữa. Tôi hơi bối rối với kết quả này, nhưng không có điểm tranh cãi với tiêu chuẩn. – mirk

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