Я читаю шаблоны C ++ - полное руководство, 2-е издание и B.2.1 рассказывает о неявном преобразовании подразумеваемого аргумента "this".
Тот же пример здесь: http://www.open -std.org/jtc1/sc22/wg21/docs/papers/2004/n1592.pdf
В зависимости от typedef для ptrdiff_t, компилятор может сделать вывод о наличии неоднозначности между BadString:: operator [] и преобразование подразумеваемого аргумента "this" в char * и использование встроенного оператора индекса.
Может кто-нибудь объяснить, как выражение obj [0] связано с этим преобразованием и почемуКомпилятор действует так, как действует в трех примерах ниже?
Спасибо.
int main() {
abc x;
auto first = x[1];
auto second = x + 2;
return 0;
}
Работает (почему?):
struct abc
{
operator bool *() { return {}; }
};
Не работает (почему):
struct abc
{
template <typename T>
operator T *() = delete;
};
template <>
abc::operator int *() { return {}; }
Не работает (использование перегруженного оператора '[]' неоднозначно):
struct abc
{
operator bool *() { return {}; }
template <typename T>
operator T *() = delete;
};
template <>
abc::operator int *() { return {}; }