$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jeff Garland (jeff_at_[hidden])
Date: 2004-04-11 10:01:02
On Sun, 11 Apr 2004 05:27:07 +0100, Val Samko wrote
> I think it is natural to back up to the last day of
> the month, if the day we have (i.e. 31 in this case) is not present
> in that month.
I agree that backing up seems like the most common desire...
> I think, the first approach (non member functions) is better, since
> a) these function do not need to know the implementation details of
> the date class
> b) having some other date class I could easily implement equivalent
> functions, keeping the syntax consistent.
Ok.
> JG> date next = ld + months(13);
>
> JG> There are some technical complications with the last syntax,
> JG> but it should be doable given some time ;-)
>
> Thoughts? what sort of complications?
> struct months { months(int m) : mo(m){}; int mo; };
> date operator + (const date& d, const month& m) { return
> add_month(d, m.mo); }
Hmm, point taken. That said, if I add this to the library people will
(correctly, I think) expect the following:
date d1 += months(3);
date d2 = d1 - months(2);
date d3 -= months(2);
date d3 = d3 + months(-2);
to work correctly. The code we have sketched so far won't handle this
correctly. Going even further, I don't see why the following isn't allowed:
ptime t1(d1); //d1 at midnight
t1 = t1 + months(2);
And I think this same logic applies to 'years' and 'weeks' as well. This
would finally unify the arithmetic concepts in the library -- not to mention
make an awful lot of date calculation code very clean.
> Anyway, I think, three namespace level functions would be sufficient.
As you can see, I have a slightly grander plan, but it should be compatible
with your needs. Do you want these functions in CVS now or are you going to
patch your release for now?
Jeff