Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

renaming as classwide type

49 views
Skip to first unread message

Simon Belmont

unread,
Sep 21, 2023, 3:29:05 PM9/21/23
to
is it really illegal to rename an object as it's classwide parent? gnat claims so. Similar results using a type extension as a generic formal "in out" object of classwide type.

declare
type P is interface;
type C is new P with null record;

o : C;
r : P'Class renames o; --error
begin
null;
end;

expected type "P'Class" defined at line
found type "C" defined at line

G.B.

unread,
Sep 21, 2023, 5:03:06 PM9/21/23
to
O does not denote an object of a class-wide type,
I think. However, P'Class (o) does, so that renaming
that would make r be of its declared type P'Class.

Simon Belmont

unread,
Sep 21, 2023, 7:19:09 PM9/21/23
to
On Thursday, September 21, 2023 at 5:03:06 PM UTC-4, G.B. wrote:
> O does not denote an object of a class-wide type,
> I think. However, P'Class (o) does, so that renaming
> that would make r be of its declared type P'Class.

That seems needlessly pedantic, considering that assignment is fine (o2 : P'Class := o) as well as assigning it to an intermediate pointer (po : access P'Class := o'Access; r : P'Class renames po.all)

Simon Wright

unread,
Sep 22, 2023, 5:31:05 AM9/22/23
to
Simon Belmont <sbelm...@gmail.com> writes:

> r : P'Class renames o; --error

This compiles OK with GCC 13.1.0:

r : P'Class renames P'Class (o);

Randy Brukardt

unread,
Sep 26, 2023, 1:45:48 AM9/26/23
to
It's not needless; there is an implicit conversion on an assignment, and it
only needs to work one way. When you rename a variable, the conversion has
to work both ways. But that's problematic, since conversions often involve
checks and we don't want checks popping up in unexpected places (both for
implementation reasons and for readability reasons).

Also, renaming does not change the nominal subtype of an object, regardless
of what subtype is given in the renames. Ada 2022 allows you to omit the
type name altogether since it provides little value.

Randy.

"Simon Belmont" <sbelm...@gmail.com> wrote in message
news:5ab7e1d5-1491-49c3...@googlegroups.com...
0 new messages