From: Dmitry A. Kazakov on
On Sat, 1 May 2010 00:42:53 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox(a)dmitry-kazakov.de> wrote in message
> news:1p28brlj9yc3k$.1nv0ey1aadvoi$.dlg(a)40tude.net...
>> On Wed, 28 Apr 2010 16:07:24 -0500, Randy Brukardt wrote:
>>
>>> As for the initial concern about giving a subtype name, in the case of
>>> literals you have to give one somewhere (since a literal can be of many
>>> different types, and the results can vary depending on the type used --
>>> not
>>> for 'Length, but for 'Last and most other properties).
>>
>> No problem, Ada supports overloading in the result type. E.g. abs (-1) is
>> OK.
>
> That doesn't help. Consider:
>
> type My_String is array (Natural range <>) of Character;
>
> Now, if you wrote:
>
> "ABC"'First
>
> The answer depends on whether the type of the prefix is String or My_String,
> but the type is Integer'Base in both cases. No amount of overloading will
> help.

How is that different to:

package P is
function ABC return String;
end P;
package Q is
type My_String is array (Natural range <>) of Character;
function ABC return My_String;
end Q;
use P,Q;
...
ABC'First; -- Ambiguous

> The language does not want the compiler to have to list out all of the
> possible types for a string literal, figure out the appropriate bounds for
> all of them, take all of the ones with the appropriate index type, and then
> allow the attribute if the answer is the same.

That would be silly, of course. But it is not what I meant. Attribute
should be an overloaded operation as any other. If the expression happens
to be ambiguous there are language means to specify what it is.

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de