comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R.Carter" <spam.jrcarter.not@spam.acm.org.not>
Subject: Re: Formal Package Compiler Differences
Date: Fri, 14 Jul 2023 21:27:34 +0200	[thread overview]
Message-ID: <u8s7j6$bh0$1@dont-email.me> (raw)
In-Reply-To: <u8s6vp$bgn$1@dont-email.me>

On 2023-07-14 21:17, Jeffrey R.Carter wrote:
> I have a generic pkg;
> 
> with Ada.Containers.Vectors;
> 
> generic -- Vector_Conversions
>     type Index is range <>;
>     type Element is private;
>     type Fixed is array (Index range <>) of Element;
> 
>     with function "=" (Left : in Element; Right : in Element) return Boolean
>     is <>;

Oops! This "=" should be removed to get the behavior described.

> 
>     with package Unbounded is new Ada.Containers.Vectors
>        (Index_Type => Index, Element_Type => Element);
> package Vector_Conversions is
>     -- Empty
> end Vector_Conversions;
> 
> and an instantiation of
> 
> with Ada.Containers.Vectors;
> with Ada.Strings.Unbounded;
> with Vector_Conversions;
> 
> procedure Instance_Test is
>     use Ada.Strings.Unbounded;
> 
>     package String_Lists is new Ada.Containers.Vectors
>        (Index_Type => Positive, Element_Type => Unbounded_String);
> 
>     type String_List is array (Positive range <>) of Unbounded_String;
> 
>     package Conversions is new Vector_Conversions
>        (Index     => Positive,
>         Element   => Unbounded_String,
>         Fixed     => String_List,
>         Unbounded => String_Lists);
> begin -- Instance_Test
>     null;
> end Instance_Test;
> 
> Compiler G compiles this and it works fine.
> 
> Compiler O fails to compile the instantiation with the error msg "The subprogram 
> actuals for the formal package and actual package must statically denote the 
> same entity", pointing to the Unbounded parameter association and referencing 
> ARM 12.7(8). If I add an explicit "=" with "is <>" to Vector_Conversions, then 
> compiler O compiles it and it works fine.
> 
> Possibly one of the compilers has an error, but possibly they're both correct, 
> and I'm wondering if it's possible to tell which is the case.
> 
> (If anyone is interested, the actual generic pkg where I encountered this is 
> PragmARC.Conversions.Vectors from the PragmAda Reusable Components 
> [https://github.com/jrcarter/PragmARC]), and I will supply the actual code that 
> instantiates it on demand. What I've presented is a first attempt at a minimal 
> reproducer.)
> 

-- 
Jeff Carter
"Make sure your code 'does nothing' gracefully."
Elements of Programming Style
196

      reply	other threads:[~2023-07-14 19:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-14 19:17 Formal Package Compiler Differences Jeffrey R.Carter
2023-07-14 19:27 ` Jeffrey R.Carter [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox