Jonathan, Thanks for the info, very helpful. One point though:
On Sat, 2011-03-12 at 01:56 -0800, Jonathan M Davis wrote: [ . . . ] > What's happening is that the parameter that you're passing n to for > recurrence > is size_t. And on 32-bit systems, size_t is uint, so passing n - which is > long - > to recurrence would be a narrowing conversion, which requires a cast. The > correct thing to do would be make n a size_t. The other thing that you'd need > to > do is change declarative to return auto, since take returns a range, _not_ a > long. It seems that D is falling into the same bear trap as C++ (and C?) descended into long ago. When a programmer want an int or a long, they actually have to decide whether they need a size_t. To be honest this is a simple WTF!!! Go really has this right. int does not exist, neither does long. int32, int64 -- no ambiguity. Why C++ and D have to continue with the pretence of platform independent types when they are far from platform independent seems counter-productive. <post-facto-rant-warning/> Thanks for the pointer about the take, I need to select just the last entry in the range and return that. > In any case, it _would_ be nice if the compiler gave a more informative > message > about _why_ the template failed to instantiate - especially since it's _not_ > the > template constraint which is the problem - but unfortunately, the compiler > just > isn't that smart about template instantiation errors. C++ is bad enough, if D cannot improve on it . . . :-(( -- Russel. ============================================================================= Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.win...@ekiga.net 41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@russel.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
signature.asc
Description: This is a digitally signed message part