Следующий код
#include <string>
struct Foo {
operator double() {
return 1;
}
int operator[](std::string x) {
return 1;
}
};
int main() {
Foo()["abcd"];
}
Скомпилируется с g++, но с компиляторами clang и intel из-за двусмысленности между объявленным методом и собственным оператором []
.
Было бы ясно, если бы Foo
имела неявное преобразование в int
, но здесь преобразование было double
. Разве это не устраняет двусмысленность?