[cfe-dev] Is this a clang bug? "Foo::Foo::bar"

Tomasz Mikolajczyk tmmikolajczyk at gmail.com
Tue Jul 16 13:15:48 PDT 2013


FYI, I submitted such issue some time ago:
http://llvm.org/bugs/show_bug.cgi?id=14100

It has been rejected as invalid at that time.

Regards,
Tomek

On Tue, Jul 16, 2013 at 9:14 PM, Mehdi AMINI <mehdi.amini at silkan.com> wrote:

> Hi,
>
> I tried to understand the PR15243 and I read the core issue 1310* but the
> examples given in both the ticket and the description with resolution 1310
> focus on the lookup of a class constructor and not a member function, like
> the example given by Jonathan. How is it applicable here, it seems to me
> that there is no ambiguity about the fact that "Foo" cannot be the
> constructor in "Foo::Foo::bar"?
>
> Thanks,
>
> Mehdi
>
> *http://www.open-std.org/jtc1/**sc22/wg21/docs/cwg_defects.**html<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html>
>
> On 7/16/13 11:39 AM, Richard Smith wrote:
>
>> That's a bug: llvm.org/PR15243 <http://llvm.org/PR15243>
>>
>>
>> The standard wording used to be ambiguous here, the resolution chosen by
>> the committee didn't match clang's interpretation of the ambiguity, and
>> no-one has gotten around to fixing it yet. Patches would be welcome ;-)
>>
>> On Tue, Jul 16, 2013 at 6:35 AM, Jonathan Sauer <jonathan.sauer at gmx.de
>> <mailto:jonathan.sauer at gmx.de>**> wrote:
>>
>>     Hello,
>>
>>     the following program compiles with clang r186311, and I'm not sure
>>     if this is a bug
>>     or correct behavior:
>>
>>     struct Foo {
>>          void bar();
>>     };
>>
>>
>>     void Foo::Foo::Foo::Foo::Foo::Foo::**bar()
>>     {
>>     }
>>
>>
>>     According to §3.3.7p1 bullet 5 (basic.scope.class), the potential
>>     scope of a class
>>     includes "the regions defined by its member definitions [...]
>>     including the member
>>     function body and any portion of the declarator part of such
>>     definitions which follows
>>     the declarator-id", and §3.4.3.1p1 (class.qual) states that "A class
>>     member can be
>>     referred to using a qualified-id at any point in its potential
>>     scope" while "the name
>>     [specified after the nested-name-specifier] shall represent one or
>>     more members of
>>     that class or of one of its base classes."
>>
>>     However in the code above the member function "bar" is referred to
>>     using a qualified-id
>>     in its declarator-id, which is not part of the class' potential
>>     scope, and "Foo" isn't
>>     a base class of itself, so this shouldn't be allowed.
>>
>>     Still, I'm not sure if I got all the subtleties of C++'s name lookup
>>     rules right, so
>>     I'd like to make sure if this is a bug in clang or merely the
>>     somewhat amusing result
>>     of the way names in C++ can be specified.
>>
>>
>>     With many thanks in advance,
>>     Jonathan
>>
>>
>>     ______________________________**_________________
>>     cfe-dev mailing list
>>     cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
>>     http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>
>>
>>
>>
>>
>> ______________________________**_________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>>
>>
>
> ______________________________**_________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/**mailman/listinfo/cfe-dev<http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130716/954b248b/attachment.html>


More information about the cfe-dev mailing list