In this case I actually think #pike is a reasonable excuse. It's not _that_ big a deal to put a couple into your old code:
#pike 7.6 mixed `[] (int a, void|int b) #pike __REAL_VERSION__ { // Feel free to use fancy new features here. }
A point in case is that the necessary places to change are found easily with a grep.
I think conveniency argument is a more compelling one: If you got a _sizeof in your class you don't have to deal with pesky from-the-end flags at all.
Another thing is that `[] wouldn't really be the convenience alternative in the future either: One would expect sizeof magic in the single argument case too, and that isn't compatible. Consider old style code calling a new style conveniency `[] that tries to operate on that principle.