Once upon a time when I was young and foolish, I was doing something [1] in C++, which has 0-based arrays. There were a lot of places in the code where 1-based arrays would have made the code quite a bit clearer, but a lot of places where 1-based arrays would have made it much less clearer.
I wanted the best of both worlds, and so overloaded the () operator so that if arr is an array, then arr(i) = arr[i-1].
This worked reasonably well, especially for arrays where it was always clearer to go 1-based, or arrays where it was always clearer to go 0-based, so that the array was always accessed with the same operator.
The only places it was questionable whether or not it made the code clearer was where I used both in the same section of code. E.g., something like b = a[i] + a(i) is arguably less clear than b = a[i] + a[i-1] or b = a(i+1) + a(i).
[1] I think it was implementing an arbitrary precision integer library using algorithms from TAOCP, but I don't remember for sure.