[cfe-dev] error: use of overloaded operator '==' is ambiguous

Shawn Erickson shawnce at gmail.com
Thu Jul 29 18:03:42 PDT 2010


Sorry for the longish code example attached to this email but I am
trying to understand if clang is being overly pedantic in this
situation. Also please let me know if I should just file defects
instead of posting to this mailing list (unsure if this is a clang
problem or not).

It seems like clang should be ignoring the private bool operators when
searching for a candidate. I assume the built-in ones would be
ignored/not listed if the only direct candidate was int32_t.

gcc likes the code...

[serickson at serickson-main:~/Development/projects/llvm_cases]
[0:656] > c++-4.2 -c issue_002.cpp


clang doesn't...

[serickson at serickson-main:~/Development/projects/llvm_cases]
[0:658] > flc --version
clang version 2.8 (trunk 109812)
Target: x86_64-apple-darwin10
Thread model: posix

[serickson at serickson-main:~/Development/projects/llvm_cases]
[0:657] > flc -c issue_002.cpp
issue_002.cpp:78:21: error: use of overloaded operator '==' is ambiguous
    if (Status::eNo == bar.isEmpty()) {
        ~~~~~~~~~~~ ^  ~~~~~~~~~~~~~
issue_002.cpp:78:21: note: because of ambiguity in conversion of
'ResultCode' (aka 'ResultCodeClass') to 'long double'
issue_002.cpp:10:5: note: candidate function
    operator const int32_t&() throw() { return _code; } //lint !e1762
// don't make this const
    ^
issue_002.cpp:11:5: note: candidate function
    operator const int32_t&() const throw() { return _code; }
    ^
issue_002.cpp:46:5: note: candidate function
    operator bool();
    ^
issue_002.cpp:47:5: note: candidate function
    operator const bool();
    ^
issue_002.cpp:78:21: note: built-in candidate operator==(long long, long double)
    if (Status::eNo == bar.isEmpty()) {
                    ^
issue_002.cpp:78:21: note: built-in candidate operator==(long long, double)
issue_002.cpp:78:21: note: built-in candidate operator==(long long, float)
issue_002.cpp:78:21: note: built-in candidate operator==(long long,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long long,
unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(long long,
unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(long long, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long long, long)
issue_002.cpp:78:21: note: built-in candidate operator==(long long, int)
issue_002.cpp:78:21: note: built-in candidate operator==(float, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(float, double)
issue_002.cpp:78:21: note: built-in candidate operator==(float, float)
issue_002.cpp:78:21: note: built-in candidate operator==(float,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(float, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(float, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(float, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(float, long)
issue_002.cpp:78:21: note: built-in candidate operator==(float, int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, float)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long
long, int)
issue_002.cpp:78:21: note: built-in candidate operator==(long double,
long double)
issue_002.cpp:78:21: note: built-in candidate operator==(long double, double)
issue_002.cpp:78:21: note: built-in candidate operator==(long double, float)
issue_002.cpp:78:21: note: built-in candidate operator==(long double,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long double,
unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(long double,
unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(long double, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long double, long)
issue_002.cpp:78:21: note: built-in candidate operator==(long double, int)
issue_002.cpp:78:21: note: built-in candidate operator==(double, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(double, double)
issue_002.cpp:78:21: note: built-in candidate operator==(double, float)
issue_002.cpp:78:21: note: built-in candidate operator==(double,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(double, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(double, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(double, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(double, long)
issue_002.cpp:78:21: note: built-in candidate operator==(double, int)
issue_002.cpp:78:21: note: built-in candidate operator==(long, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(long, double)
issue_002.cpp:78:21: note: built-in candidate operator==(long, float)
issue_002.cpp:78:21: note: built-in candidate operator==(long,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(long, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(long, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(long, long)
issue_002.cpp:78:21: note: built-in candidate operator==(long, int)
issue_002.cpp:78:21: note: built-in candidate operator==(int, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(int, double)
issue_002.cpp:78:21: note: built-in candidate operator==(int, float)
issue_002.cpp:78:21: note: built-in candidate operator==(int, unsigned
long long)
issue_002.cpp:78:21: note: built-in candidate operator==(int, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(int, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(int, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(int, long)
issue_002.cpp:78:21: note: built-in candidate operator==(int, int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned
long, long double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long, double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long, float)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned
long, unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned
long, unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned
long, unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned
long, long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long, long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned long, int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int,
long double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int, double)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int, float)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int,
unsigned long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int,
unsigned long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int,
unsigned int)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int,
long long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int, long)
issue_002.cpp:78:21: note: built-in candidate operator==(unsigned int, int)
1 error generated.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: issue_002.cpp
Type: application/octet-stream
Size: 3183 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20100729/21d470dd/attachment.obj>


More information about the cfe-dev mailing list