https://bugs.llvm.org/show_bug.cgi?id=40610
Bug ID: 40610
Summary: use of overloaded operator '[]' is ambiguous (with
template conversion operator)
Product: clang
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: -New Bugs
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected], [email protected],
[email protected], [email protected]
#include <type_traits>
struct abc
{
operator bool *() { return {}; }
template <typename T> operator T *() { return {}; }
//template <typename T, typename U = std::enable_if_t<std::is_same_v<T,
std::remove_cv_t<T>>> > operator T *() = delete;
};
int main() {
abc{}[0];
return 0;
}
#1 with x86-64 clang 7.0.0
<source>:11:10: error: use of overloaded operator '[]' is ambiguous (with
operand types 'abc' and 'int')
abc{}[0];
~~~~~^~
<source>:11:10: note: built-in candidate operator[](_Bool *, long)
<source>:11:10: note: built-in candidate operator[](const _Bool *, long)
<source>:11:10: note: built-in candidate operator[](volatile _Bool *, long)
<source>:11:10: note: built-in candidate operator[](const volatile _Bool *,
long)
If second template is used instead - it compiles just fine.
GCC, MSVC and ICC all are happy with this code.
--
You are receiving this mail because:
You are on the CC list for the bug._______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs