From: Arno on
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
From: Leigh Johnston on


"Arno" <aschoedl(a)think-cell.com> wrote in message
news:53743777-8139-4868-90f2-1508d33d32ba(a)k19g2000yqc.googlegroups.com...
> 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?
>

Looks like a bug to me, you should raise a defect on Microsoft Connect
http://connect.microsoft.com/

/Leigh

From: Igor Tandetnik on
Arno wrote:
> 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?

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
From: Arno on
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
From: Bo Persson on
Arno wrote:
> 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