From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: Incompatible types for array conversion Date: Wed, 22 Jul 2015 08:20:11 +0300 Organization: Tidorum Ltd Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net PEPSCE+vssswEK6PM4pk1AQOGrH4XRwsFxwoK5y3myDHE0bswY Cancel-Lock: sha1:+oCsGFJ+JH4zpu75GtEvUnJoCi0= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 In-Reply-To: Xref: news.eternal-september.org comp.lang.ada:26952 Date: 2015-07-22T08:20:11+03:00 List-Id: On 15-07-22 04:19 , hreba wrote: > I have a generic vector package: > > generic > dim: positive; > type Real is digits <>; > package Vectors is > type Vector is array (1..dim) of Real; > function "*" (a: Vector; b: Real) return Vector; > end Vectors; > > In another package I want to model the definition of a (physical) > position vector by its direction and module: > > package Basic is > type Real is new Interfaces.IEEE_Float_64; > type Length is new Real; > > package Positions is new Gen.Vectors (3, Length); > package Directions is new Gen.Vectors (3, Real); > > subtype Position is Positions.Vector; > subtype Direction is Directions.Vector; > > function "*" (l: Direction; r: Length) return Position; > end Basic; > > Now my attempt to define this function: > > function "*" (l: Direction; r: Length) return Position is > begin return Positions."*"(Position(l), r); end "*"; > > gets me the error message in the subject line. > > Do I have to convert the vector element by element in a loop or is there > a more elegant way? The conversion is rejected because of the conversion condition in RM 4.6 (24.5/2): "The component subtypes shall statically match". The component (sub)types are Real and Length, which are different types, although Length is derived from Real. If you change the declaration of Length to be subtype Length is Real; the conversion becomes legal. -- Niklas Holsti Tidorum Ltd niklas holsti tidorum fi . @ .