demo'd situation where underlying types don't obey associativity
This commit is contained in:
parent
9a8b559ce4
commit
63f9f0a7fd
1 changed files with 16 additions and 0 deletions
16
sum.cpp
16
sum.cpp
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue