After my trouble yesterday, I am sure we are opening Pandora’s box if we just add/change something without much deeper thought. We literally change the Octave language here. I am also no fan of following Matlab’s adventurous language journey. But several painful lessons in the past showed not to be too different in fundamental features. Indexing I see as such and we cannot even expect a performance gain from it 
First thing that is clear to me now, that isindex
in it’s current implementation works perfectly. Everything Octave permits to be an index expression (stupid or not) is correctly identified as such. The function just tries to convert it’s argument to an index. Nothing to improve here.
>> a = 1:200;
>> a(":");
>> a(':8')
ans =
58 56
>> a("3:8")
ans =
51 58 56
>> isindex (':')
ans = 1
>> isindex (":")
ans = 1
>> isindex (':8')
ans = 1
>> isindex ("3:8")
ans = 1
With your patch we artificially change the game. We give the user a wrong answer. We are saying “what you give us is not a valid index”, but all we want to say is “what you give us is not good to be used as index as it will be a pain in the lower body part to identify problems with such index expressions”. Furthermore, when the user ignores good programming practice to check with isindex
before firing the unchecked expression at the array, she will have no trouble and perhaps file a bug report that isindex
is broken 
Second bigger topic is changing what Octave accepts as index expression.
This I do not fully understand. octave_value::idx_type_value
is a dispatcher function for octave_value::int_value
or octave_value::int64_value
I do not think this has anything to do with converting string expression, only double conversions libinterp/octave-value/ov-base.cc, but maybe you only suggested this as a template.
Also in this case you had to add this parameter to all 18 constructors of index_vector
and everywhere those constructors are called

I think this had to be fixed somewhere in the parser level, when the index_vector
constructor is called, the individual chars are probably already implicitly converted to integers, as a string is mostly an Array<char>
to my knowledge.