demo'd situation where underlying types don't obey associativity

This commit is contained in:
Pagwin 2024-12-11 14:13:33 -05:00
parent 9a8b559ce4
commit 63f9f0a7fd
No known key found for this signature in database
GPG key ID: 81137023740CA260

16
sum.cpp
View file

@ -20,6 +20,16 @@ public:
const_cast<ss_sum &>(rhs).ss << tmp;
ss << tmp;
}
ss_sum &operator=(ss_sum const &rhs) {
std::string tmp;
// clear out string stream
ss >> tmp;
const_cast<ss_sum &>(rhs).ss >> tmp;
const_cast<ss_sum &>(rhs).ss << tmp;
ss << tmp;
return *this;
}
friend ss_sum operator+(ss_sum const &lhs, ss_sum const &rhs) {
ss_sum ret = lhs;
ss_sum tmp = rhs;
@ -54,4 +64,10 @@ int main(void) {
auto tmp = sum<ss_sum, ss_sum, ss_sum>(1, 2, 3);
dummy = tmp == ss_sum{"123"};
assert(dummy);
// demo of situation where associativity isn't applicable ss_sum+(int+int) !=
// (ss_sum+int)+int
tmp = sum<ss_sum, int, int>(1, 2, 3);
dummy = tmp == ss_sum{"15"};
assert(dummy);
}