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,703c4f68db81387d X-Google-Thread: 109fba,703c4f68db81387d X-Google-Thread: 115aec,703c4f68db81387d X-Google-Thread: f43e6,703c4f68db81387d X-Google-Attributes: gid103376,gid109fba,gid115aec,gidf43e6,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!news.glorb.com!news-out.superfeed.net!propagator3-LAX.newsfeeds.com!news-in.usenet.com!news-out.ntli.net!newsrout1-gui.ntli.net!ntli.net!newspeer1-win.ntli.net!newsfe3-gui.ntli.net.POSTED!53ab2750!not-for-mail From: "Dr. Adrian Wrigley" Subject: Re: [OT] Re: Teaching new tricks to an old dog (C++ -->Ada) User-Agent: Pan/0.14.2 (This is not a psychotic episode. It's a cleansing moment of clarity.) Message-Id: Newsgroups: comp.lang.ada,comp.lang.c++,comp.realtime,comp.software-eng References: <4229bad9$0$1019$afc38c87@news.optusnet.com.au> <1110032222.447846.167060@g14g2000cwa.googlegroups.com> <871xau9nlh.fsf@insalien.org> <3SjWd.103128$Vf.3969241@news000.worldonline.dk> <87r7iu85lf.fsf@insalien.org> <1110052142.832650@athnrd02> <42309456$1@news.broadpark.no> <4232ab3a$0$26547$9b4e6d93@newsread4.arcor-online.net> <1110825790.396769@athnrd02> <1110840455.590087@athnrd02> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Date: Tue, 15 Mar 2005 00:02:23 GMT NNTP-Posting-Host: 81.100.88.147 X-Complaints-To: http://www.ntlworld.com/netreport X-Trace: newsfe3-gui.ntli.net 1110844943 81.100.88.147 (Tue, 15 Mar 2005 00:02:23 GMT) NNTP-Posting-Date: Tue, 15 Mar 2005 00:02:23 GMT Organization: ntl Cablemodem News Service Xref: g2news1.google.com comp.lang.ada:9414 comp.lang.c++:45716 comp.realtime:1495 comp.software-eng:5062 Date: 2005-03-15T00:02:23+00:00 List-Id: On Tue, 15 Mar 2005 00:47:37 +0200, Ioannis Vranos wrote: > struct IntervalLessCompare > { > inline bool operator() (interval a, interval b) const > { > using namespace std; > > return difftime( mktime(&a.finish), mktime(&a.start) ) < > difftime( mktime(&b.finish), mktime(&b.start) ); > } > }; Doesn't this break down for times beyond the end of the epoch, which are valid tm values, but invalid time_t values? You've ended up mapping all post-epoch times to the same entry! Doesn't it also break down when someone adds a microsecond value in the tm struct for some platforms? Seems like a reasonable thing for someone to try to do, but breaks this code. You have to then introduce a platform specific fix. Maybe unlikely for ctime, but there are plenty of less stable interfaces. What if it was mm.h's mem_core struct (Linux)? What about things with floating point components, where different values compare as equal (+0 and -0) and identical values (NaN) give inconsistent comparison? In general, you may need to use "private" implementation details of the class when defining the operator, ending up with broken code, broken "contracts" and broken encapsulation. This is sounding too much like a troll, and I think the points have been fully made by Robert and others. I have learnt that there is a major gulf between users' expectations of C++ templates and of Ada generics. "contract model" is the difference. -- Adrian