2015-03-10 37 views

Trả lời

7

Clang là đúng.

Hơi ngạc nhiên, ngữ pháp cho tham số khai giấy phép cả qualified-không đủ tiêu chuẩn-id s, bởi vì nó chấp nhận tất cả declarator s:

parameter-declaration: 
    attribute-specifier-seq_opt decl-specifier-seq declarator 
    attribute-specifier-seq_opt decl-specifier-seq declarator = initializer-clause 
    attribute-specifier-seq_opt decl-specifier-seq abstract-declarator_opt 
    attribute-specifier-seq_opt decl-specifier-seq abstract-declarator_opt = initializer-clause 

và ngữ pháp cho một Người khai báo cho phép cả hai đủ điều kiện-id không đủ tiêu chuẩn s. Quy tắc "no đủ điều kiện-id cho tên tham số chức năng", tốt hơn hoặc tệ hơn, là quy tắc ngữ nghĩa, mặc dù có thể dễ dàng viết một ngữ pháp cho khai báo tham số loại trừ đủ điều kiện-id s .

Cũng giống như tình hình ở this question, các quy tắc định hướng hoàn toàn là syntatic, và kể từ

Baz b(Foo(Foo::bar)); 

syntatically thể được phân tích như một khai báo hàm, nó là như vậy phân tích, mặc dù định hướng trong trường hợp này kết quả trong cái gì đó không bao giờ có thể biên dịch được.

Xem thêm clang bug 4594.

+1

Tôi sẽ nói điều này có vẻ rất quen thuộc ;-) vì vậy ai là chính xác 'gcc' hoặc' clang', nó phải rõ ràng nhưng nó sẽ được tốt đẹp để được rõ ràng hơn. –

+0

@ShafikYaghmour biến thể trên cùng một chủ đề, để chắc chắn :) Trường hợp này đã làm tôi ngạc nhiên, và tôi thường khá giỏi trong việc phát hiện MVP ... –

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