Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > User error or g++ disambiguation bug?

Reply
Thread Tools

User error or g++ disambiguation bug?

 
 
Nomen Nescio
Guest
Posts: n/a
 
      08-21-2007
Hello,

If anyone can give me some insight as to why this code fails to compile, I would be most appreciative. I have only been able to test it with gcc 3.4.4 and gcc 4.2.1, which both fail with different errors (details below).

//////// begin test_bug.cpp

// Standard Type2Type from Alexandrescu's Modern C++ Design
template<typename T>
struct Type2Type
{
typedef T OriginalType;
};

// Base for mix-in classes
template<typename Mixin>
struct MixinBase
{
virtual ~MixinBase() {}
virtual void mixinVirtual() {}

static void mixinStatic(Type2Type<Mixin>) {}
};

struct MixinA
: public MixinBase<MixinA>
{
};

struct MixinB
: public MixinBase<MixinB>
{
};

// Base for mix-in classes in an object
template<typename ObjType, typename Mixin>
struct ObjMixin
: public Mixin
{
void mixinVirtual()
{
ObjType::mixinStatic(Type2Type<Mixin>());
}
};

// Object composed of two mix-in classes
struct TestObj
: public ObjMixin<TestObj, MixinA>
, public ObjMixin<TestObj, MixinB>
{
} testInstance;

//////// end test_bug.cpp

g++ 4.2.1 rejects this with the following output:
----------
% g++ test_bug.cpp
test_bug.cpp: In member function 'void ObjMixin<ObjType, Mixin>::mixinVirtual() [with ObjType = TestObj, Mixin = MixinA]':
test_bug.cpp:44: instantiated from here
test_bug.cpp:35: error: reference to 'TestObj::mixinStatic' is ambiguous
test_bug.cpp:15: error: candidates are: static void MixinBase<Mixin>::mixinStatic(Type2Type<Mixin>) [with Mixin = MixinB]
test_bug.cpp:15: error: static void MixinBase<Mixin>::mixinStatic(Type2Type<Mixin>) [with Mixin = MixinA]
test_bug.cpp: In member function 'void ObjMixin<ObjType, Mixin>::mixinVirtual() [with ObjType = TestObj, Mixin = MixinB]':
test_bug.cpp:44: instantiated from here
test_bug.cpp:35: error: reference to 'TestObj::mixinStatic' is ambiguous
test_bug.cpp:15: error: candidates are: static void MixinBase<Mixin>::mixinStatic(Type2Type<Mixin>) [with Mixin = MixinB]
test_bug.cpp:15: error: static void MixinBase<Mixin>::mixinStatic(Type2Type<Mixin>) [with Mixin = MixinA]
----------

This would at least appear to be wrong, since the different values for Mixin (MixinA and MixinB) should disambiguate the call.


g++ 3.4.4 rejects it with the following output:
----------
> g++ test_bug.cpp

test_bug.cpp: In member function `void ObjMixin<ObjType, Mixin>::mixinVirtual() [with ObjType = TestObj, Mixin = MixinA]':
test_bug.cpp:40: instantiated from here
test_bug.cpp:32: error: `mixinStatic' is not a member of `TestObj'
test_bug.cpp: In member function `void ObjMixin<ObjType, Mixin>::mixinVirtual() [with ObjType = TestObj, Mixin = MixinB]':
test_bug.cpp:40: instantiated from here
test_bug.cpp:32: error: `mixinStatic' is not a member of `TestObj'
----------

Again this seems wrong, removing ObjMixin<TestObj, MixinB> from the definition of TestObj results in correct compilation under both versions, so clearly mixinStatic is found as a member of TestObj in some cases.

Thanks in advance for any insight into what could be going on here.





 
Reply With Quote
 
 
 
 
Mark Bluemel
Guest
Posts: n/a
 
      08-21-2007
Nomen Nescio wrote:

<snip>

> //////// begin test_bug.cpp


I think you need the C++ newsgroup - try comp.lang.c++
 
Reply With Quote
 
 
 
 
Keith Thompson
Guest
Posts: n/a
 
      08-21-2007
Nomen Nescio <(E-Mail Removed)> writes:
> If anyone can give me some insight as to why this code fails to
> compile, I would be most appreciative. I have only been able to test
> it with gcc 3.4.4 and gcc 4.2.1, which both fail with different
> errors (details below).
>
> //////// begin test_bug.cpp
>
> // Standard Type2Type from Alexandrescu's Modern C++ Design
> template<typename T>

[snip]

Your code is C++, not C, so you should post to comp.lang.c++, not
comp.lang.c.

You also cross-posted to gnu.g.bug; I think you want gnu.g++.bug.

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
spamfree@mailinator.com
Guest
Posts: n/a
 
      08-21-2007
On Aug 21, 3:38 am, Keith Thompson <(E-Mail Removed)> wrote:
[snip]
> Your code is C++, not C, so you should post to comp.lang.c++, not
> comp.lang.c.
>
> You also cross-posted to gnu.g.bug; I think you want gnu.g++.bug.


My apologies, I used a random web form to submit the post and
apparently it failed to properly encode the ++ in both c++ and g++ in
the process.

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      08-21-2007
(E-Mail Removed) writes:
> On Aug 21, 3:38 am, Keith Thompson <(E-Mail Removed)> wrote:
> [snip]
>> Your code is C++, not C, so you should post to comp.lang.c++, not
>> comp.lang.c.
>>
>> You also cross-posted to gnu.g.bug; I think you want gnu.g++.bug.

>
> My apologies, I used a random web form to submit the post and
> apparently it failed to properly encode the ++ in both c++ and g++ in
> the process.


Apparently there are interfaces worse than Google Groups. }

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
Default User
Guest
Posts: n/a
 
      08-21-2007
Keith Thompson wrote:

> (E-Mail Removed) writes:
> > On Aug 21, 3:38 am, Keith Thompson <(E-Mail Removed)> wrote:
> > [snip]
> >> Your code is C++, not C, so you should post to comp.lang.c++, not
> >> comp.lang.c.
> > >
> >> You also cross-posted to gnu.g.bug; I think you want gnu.g++.bug.

> >
> > My apologies, I used a random web form to submit the post and
> > apparently it failed to properly encode the ++ in both c++ and g++
> > in the process.

>
> Apparently there are interfaces worse than Google Groups. }



I think that using a random web form and getting this close is pretty
amazing.




Brian
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      08-21-2007
"Default User" <(E-Mail Removed)> writes:
> Keith Thompson wrote:
>> (E-Mail Removed) writes:
>> > On Aug 21, 3:38 am, Keith Thompson <(E-Mail Removed)> wrote:
>> > [snip]
>> >> Your code is C++, not C, so you should post to comp.lang.c++, not
>> >> comp.lang.c.
>> > >
>> >> You also cross-posted to gnu.g.bug; I think you want gnu.g++.bug.
>> >
>> > My apologies, I used a random web form to submit the post and
>> > apparently it failed to properly encode the ++ in both c++ and g++
>> > in the process.

>>
>> Apparently there are interfaces worse than Google Groups. }

>
> I think that using a random web form and getting this close is pretty
> amazing.


I suspect it was only a pseudo-random web form.

Hmm, a truly random web form might be interesting, though not in any
useful way.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
Default User
Guest
Posts: n/a
 
      08-21-2007
Keith Thompson wrote:

> "Default User" <(E-Mail Removed)> writes:
> > Keith Thompson wrote:
> >> (E-Mail Removed) writes:
> >> > On Aug 21, 3:38 am, Keith Thompson <(E-Mail Removed)> wrote:
> >> > [snip]
> >> >> Your code is C++, not C, so you should post to comp.lang.c++,

> not >> >> comp.lang.c.
> >> > >
> >> >> You also cross-posted to gnu.g.bug; I think you want

> gnu.g++.bug. >> >
> >> > My apologies, I used a random web form to submit the post and
> >> > apparently it failed to properly encode the ++ in both c++ and

> g++ >> > in the process.
> >>
> >> Apparently there are interfaces worse than Google Groups. }

> >
> > I think that using a random web form and getting this close is
> > pretty amazing.

>
> I suspect it was only a pseudo-random web form.


Still, getting to a programming newsgroup rather than, say, buying
tickets to a Beatles tribute band is pretty good.

> Hmm, a truly random web form might be interesting, though not in any
> useful way.


Oh crap, that one went to the "Hawt Gurlz in Pink Sox" forum. Probably
won't get too many useful answers.




Brian

 
Reply With Quote
 
Old Wolf
Guest
Posts: n/a
 
      08-23-2007
On Aug 22, 7:27 am, Keith Thompson <(E-Mail Removed)> wrote:
>
> Apparently there are interfaces worse than Google Groups. }


Barely. On the side-bar as I read this thread, are three
"Sponsored Links" (urls omitted):
[[Give Her More to Swallow]] Fill mouths with 500% bigger loads
Top semen volumizers reviewed

[[She Loves To Swallow]] See girls take a mouthful and swish
it all down--they love the stuff!

[[Load My Mouth]] First they get a big mouth full, then they
swallow every drop!

These ads appear to be selected based on the message content;
normally I get ads for C flowchart tools or network analyzer
programs etc. I wonder what it was in this thread that triggered
those ads! In fact I might complain about it, as it is NSFW.


 
Reply With Quote
 
pete
Guest
Posts: n/a
 
      08-24-2007
Old Wolf wrote:
>
> On Aug 22, 7:27 am, Keith Thompson <(E-Mail Removed)> wrote:
> >
> > Apparently there are interfaces worse than Google Groups. }

>
> Barely. On the side-bar as I read this thread, are three
> "Sponsored Links" (urls omitted):
> [[Give Her More to Swallow]] Fill mouths with 500% bigger loads
> Top semen volumizers reviewed
>
> [[She Loves To Swallow]] See girls take a mouthful and swish
> it all down--they love the stuff!
>
> [[Load My Mouth]] First they get a big mouth full, then they
> swallow every drop!
>
> These ads appear to be selected based on the message content;
> normally I get ads for C flowchart tools or network analyzer
> programs etc. I wonder what it was in this thread that triggered
> those ads! In fact I might complain about it, as it is NSFW.


Sometimes, when I'm using a friend's grandkids' computer,
a section of a clc thread on google groups,
will be blocked by "parental controls".

--
pete
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
out of class declaration virtual function disambiguation bonzo C++ 1 10-15-2008 10:33 AM
User error or g++ disambiguation bug? spamfree@mailinator.com C++ 1 08-21-2007 08:41 PM
technique to enter text using a mobile phone keypad (T9dictionary-based disambiguation) =?windows-1250?Q?Petr_Jake=9A?= Python 11 08-10-2006 11:32 AM
Template disambiguation John Collins C++ 1 12-29-2004 01:40 AM
template and disambiguation Xenos C++ 2 04-29-2004 10:03 AM



Advertisments