क्लैंग सही है।
कुछ हद तक आश्चर्यजनक रूप से, पैरामीटर-घोषणा के लिए व्याकरण परमिट दोनों qualified- और अयोग्य-आईडी है, क्योंकि यह स्वीकार करता है सब declarator रों:
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
और एक के लिए व्याकरण घोषणाकर्तायोग्य- और अयोग्यता आईडी एस दोनों परमिट देता है। शासन, बेहतर या बदतर के लिए "कोई समारोह पैरामीटर नाम के लिए योग्य-आईडी", एक अर्थ नियम, भले ही यह पैरामीटर-घोषणा कि योग्य-आईडी रों सीधे शामिल नहीं है के लिए एक व्याकरण लिखने के लिए आसानी से संभव है ।
बस this question में स्थिति की तरह, बहुविकल्पी शासन विशुद्ध रूप से syntatic है, और के बाद से
Baz b(Foo(Foo::bar));
syntatically एक समारोह घोषणा के रूप में पार्स किया जा सकता है, यह बहुत पार्स किया गया है, भले ही इस मामले परिणामों में बहुविकल्पी में कुछ ऐसा जो कभी संकलित नहीं कर सकता है।
clang bug 4594 भी देखें।
स्रोत
2015-03-10 03:49:35
मैं यह कहने जा रहा था कि यह बहुत परिचित दिखता है ;-) तो सही 'gcc' या' clang' कौन है, यह स्पष्ट होना चाहिए लेकिन यह अधिक स्पष्ट होना अच्छा होगा। –
@ShafikYaghmour एक ही विषय पर भिन्नता सुनिश्चित करने के लिए :) इस मामले ने मुझे आश्चर्यचकित कर दिया, और मैं आम तौर पर एमवीपी को ढूंढने में काफी अच्छा हूं ... –