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=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,25b9eb5c3a89bced X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news2.google.com!news3.google.com!newsfeed2.dallas1.level3.net!news.level3.com!newsfeed-00.mathworks.com!news.tele.dk!feed118.news.tele.dk!news.tele.dk!small.news.tele.dk!news.netcologne.de!newsfeed-fusi2.netcologne.de!newsfeed01.chello.at!newsfeed02.chello.at!news.hispeed.ch.POSTED!not-for-mail Message-ID: <1235818.stAph9vF03@linux1.krischik.com> From: Martin Krischik Subject: Re: where exactly c++,c fail and Ada gets thru' Newsgroups: comp.lang.ada Date: Wed, 26 Apr 2006 19:32:50 +0200 References: <1145852356.559455.222600@i39g2000cwa.googlegroups.com> <1145855124.720029.35280@t31g2000cwb.googlegroups.com> User-Agent: KNode/0.10.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@hispeed.ch Organization: hispeed.ch NNTP-Posting-Host: 80.218.119.160 (80.218.119.160) NNTP-Posting-Date: Wed, 26 Apr 2006 19:45:05 +0200 X-Trace: 05bbf444fb1a1f57fd20530308 Xref: g2news2.google.com comp.lang.ada:3937 Date: 2006-04-26T19:32:50+02:00 List-Id: Maciej Sobczak wrote: > Yes, classes are used to define new types. Is there any problem with > this? It is also necessary in Ada if we want to do just a bit more of > what is provided by type and subtype constructs. Say: type Y_Type is range 1 .. 10; subtype X_Type is new x range 1 .. 5; function F (X: X_Type) return Y_Type is begin return X + 3; end F Now I would expect that an Ada compiler will not insert any runtime checks as X + 3 is allways in the range of Y_Type. However: function G (X: X_Type) return Y_Type is begin return X + 7; end G; may well be outside the range of Y_Type and if so CONSTRAINT_ERROR will be raised. Now say we have a suitable C++ range template: typedef range Y_Type; typedef range X_Type; Y_Type F (X_Type X) { return X + 3; } Y_Type G (X_Type X) { return X + 7; } Now anyone up to the challenge to define: template range::operator = (Base_Type right) template range::operator + (Base_Type right) template range::range (Base_Type right) in such a way that it works like Ada - inclusive the *realistic* change that the compiler will optimize away the range check in F (). Martin -- mailto://krischik@users.sourceforge.net Ada programming at: http://ada.krischik.com