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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,74bfb16f8a37fb10,start X-Google-Attributes: gid103376,public From: mheaney@ni.net (Matthew Heaney) Subject: operands of membership tests Date: 1997/10/26 Message-ID: #1/1 X-Deja-AN: 285192408 Organization: Estormza Software Newsgroups: comp.lang.ada Date: 1997-10-26T00:00:00+00:00 List-Id: A membership never raises Constraint_Error, but evaluation of its operands might. Suppose I do this with Ada.Text_IO; use Ada.Text_IO; procedure Test_Fixed is type Fixed is delta 1.0 range 0.0 .. 256.0; for Fixed'Small use 1.0; begin Put (Boolean'Image (33_000.0 in Fixed)); end; Let's suppose 33_000.0 isn't even in the base range of Fixed. Can evaluation of the literal 33_000.0 raise Constraint_Error? In RM83 11.6 (9), the note states that an implementation is allowed to replace the expression with a constant value (in my example, False), even though the operand is outside the base range of the type. What's the story in Ada 95? What's the more general case, for any relational operator? Under what circumstances does evaluation of (numeric) literals raise Constraint_Error? Under what circumstances can an implementation remove an expression it can evaluate statically, containing (static) operands that are outside the base range of the type? -------------------------------------------------------------------- Matthew Heaney Software Development Consultant (818) 985-1271