User error or g++ disambiguation bug?

N

Nomen Nescio

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'
 
K

Keith Thompson

Nomen Nescio said:
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.
 
G

Guest

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.
 
K

Keith Thompson

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. :cool:}
 
D

Default User

Keith said:
Apparently there are interfaces worse than Google Groups. :cool:}


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




Brian
 
K

Keith Thompson

Default User said:
Keith said:
[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. :cool:}

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.
 
D

Default User

Keith said:
Default User said:
Keith said:
(e-mail address removed) writes:
[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. :cool:}

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
 
O

Old Wolf

Apparently there are interfaces worse than Google Groups. :cool:}

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.
 
P

pete

Old said:
Apparently there are interfaces worse than Google Groups. :cool:}

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".
 
C

CBFalconer

Old said:
Keith Thompson said:
Apparently there are interfaces worse than Google Groups. :cool:}

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.

As I understand it, Googol is very proud of the fact that they
dispense ads dependant on the historical interests of the user!
:) What have you been researching?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,680
Members
48,796
Latest member
Greg L.

Latest Threads

Top