
hi please compile this program: #include <boost/date_time/posix_time/ptime.hpp> #include <iostream> #include <vector> using namespace boost::posix_time; using namespace std; #define x(v) cout << #v << " : " << (v) << '\n'; int main(int argc, char *argv[]) { time_duration a(not_a_date_time); time_duration b; x(a<b); x(a>b); x(a<=b); x(a>=b); x(b<a); x(b>a); x(b<=a); x(b>=a); x(a==b); x(b==a); x(a.is_special()); x(b.is_special()); vector<time_duration> v0, v1; v0.push_back(time_duration()); v0.push_back(time_duration(not_a_date_time)); sort(v0.begin(), v0.end()); v1.push_back(time_duration(not_a_date_time)); v1.push_back(time_duration()); sort(v1.begin(), v1.end()); x(v0==v1); return 0; } the output is: a<b : 0 a>b : 0 a<=b : 1 a>=b : 1 b<a : 0 b>a : 0 b<=a : 1 b>=a : 1 a==b : 0 b==a : 0 a.is_special() : 1 b.is_special() : 0 v0==v1 : 0 if the time_duration datatype is a complete partial order which is for example needed for it to be able to be sorted, then the above output is partly illegal: if not a<b and not b<a then must be a=b. but this is not the case. if a<=b and b<=a then must be a=b. but this is not the case. so as expected the two vectors v0 and v1 are not equal after being sorted even though they certainly should be! i do not understand why time_duration is behaving in such a strange way here. I am using time_duration(not_a_date_time) as a SQL-NULL value just like i am using date(not_a_date_time) and ptime(not_a_date_time) as SQL-NULL values. obviously I should not use time_duration(not_a_date_time). maybe this is the reason why time_duration() != time_duration(not_a_date_time)? I don't understand the design here. for example date()==date(not_a_date_time) and also ptime()==ptime(not_a_date_time) but not with time_duration. why??? why is there no documentation that time_duration is not a complete partial order and thus not sortable - at least when using not_a_date_time? cya erik