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;
|
const_cast<ss_sum &>(rhs).ss << tmp;
|
||||||
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) {
|
friend ss_sum operator+(ss_sum const &lhs, ss_sum const &rhs) {
|
||||||
ss_sum ret = lhs;
|
ss_sum ret = lhs;
|
||||||
ss_sum tmp = rhs;
|
ss_sum tmp = rhs;
|
||||||
|
@ -54,4 +64,10 @@ int main(void) {
|
||||||
auto tmp = sum<ss_sum, ss_sum, ss_sum>(1, 2, 3);
|
auto tmp = sum<ss_sum, ss_sum, ss_sum>(1, 2, 3);
|
||||||
dummy = tmp == ss_sum{"123"};
|
dummy = tmp == ss_sum{"123"};
|
||||||
assert(dummy);
|
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