diff --git a/sum.cpp b/sum.cpp index b0268be..851f6db 100644 --- a/sum.cpp +++ b/sum.cpp @@ -20,6 +20,16 @@ public: const_cast(rhs).ss << tmp; ss << tmp; } + ss_sum &operator=(ss_sum const &rhs) { + std::string tmp; + // clear out string stream + ss >> tmp; + + const_cast(rhs).ss >> tmp; + const_cast(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(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(1, 2, 3); + dummy = tmp == ss_sum{"15"}; + assert(dummy); }