So are you proposing to use dependently typed languages then? Typical languages like C++ don't make it very convenient.
template<size_t N>
void do_something(char (&s)[N]) { ... }
Now when you have a string of unknown length, how do you reify it with that template? In practice languages then have to keep around an unknown type argument at runtime. This is incompatible with most languages where types aren't known at runtime.