Discussion:
enum operator overloading VC9 compiler bug?
(too old to reply)
Arno
2010-01-31 20:40:16 UTC
Permalink
Hello,

compiling this snippet:

enum E {
e1
};

bool operator<=( E, E ) {
return false;
}

int main()
{
E e;
e<=e;

return 0;
}

produces

1>c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(17) : error C2593: 'operator <=' is ambiguous
1> c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(10): could be 'bool operator <=(E,E)'
1> or 'built-in C++ operator<=(E, E)'
1> while trying to match the argument list '(E, E)'

comp.lang.c++.moderated seems to think it is a compiler bug. Is it?

Arno
Leigh Johnston
2010-01-31 20:55:02 UTC
Permalink
Post by Arno
Hello,
enum E {
e1
};
bool operator<=( E, E ) {
return false;
}
int main()
{
E e;
e<=e;
return 0;
}
produces
1>c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(17) : error C2593: 'operator <=' is ambiguous
1> c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(10): could be 'bool operator <=(E,E)'
1> or 'built-in C++ operator<=(E, E)'
1> while trying to match the argument list '(E, E)'
comp.lang.c++.moderated seems to think it is a compiler bug. Is it?
Looks like a bug to me, you should raise a defect on Microsoft Connect
http://connect.microsoft.com/

/Leigh
Igor Tandetnik
2010-01-31 21:15:10 UTC
Permalink
Post by Arno
enum E {
e1
};
bool operator<=( E, E ) {
return false;
}
int main()
{
E e;
e<=e;
return 0;
}
produces
1>c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(17) : error C2593: 'operator <=' is ambiguous
1> c:\users\schoedl\documents\visual studio 2008\projects
\test6\test6\test6.cpp(10): could be 'bool operator <=(E,E)'
1> or 'built-in C++ operator<=(E, E)'
1> while trying to match the argument list '(E, E)'
comp.lang.c++.moderated seems to think it is a compiler bug. Is it?
Looks like a bug to me, too. From C++ standard 13.3.1.2p3:

For a ... binary operator @ with a left operand of a type whose cv-unqualified version is T1 and a right operand of a type whose cv-unqualified version is T2, three sets of candidate functions, designated member candidates, non-member candidates and built-in candidates, are constructed as follows:
...
- The set of non-member candidates is the result of the unqualified lookup of operator@ in the context of the expression according to the usual rules for name lookup in unqualified function calls (3.4.2) except that all member functions are ignored...
- ... the built-in candidates include all of the candidate operator functions defined in 13.6 that, compared to the given operator, ...
- do not have the same parameter-type-list as any non-template non-member candidate.


The last clause should have removed built-in operator<= from consideration in your example.
--
With best wishes,
Igor Tandetnik

With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead. -- RFC 1925
Arno
2010-02-08 08:01:38 UTC
Permalink
The bug has been confirmed but set to Resolved - Won't fix. They say
they may look at it again in the future, but they also say that I am
the only one who reported it, so I don't have much hope.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=529700

Arno
Bo Persson
2010-02-08 17:54:06 UTC
Permalink
Post by Arno
The bug has been confirmed but set to Resolved - Won't fix. They say
they may look at it again in the future, but they also say that I am
the only one who reported it, so I don't have much hope.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=529700
Arno
Considering that Visual Studio 2010 is at Beta 2 stage, with the first
Release Candidate appearing any day now,

http://blogs.msdn.com/bharry/archive/2009/12/17/vs-2010-net-4-public-release-candidate-planned.aspx


you will have to report some really, REALLY, mega-terrible bugs to
have them fixed immediately. :-)


Bo Persson

Loading...