From 63f9f0a7fdc780652125b07a71e2a4d6801f602d Mon Sep 17 00:00:00 2001 From: Pagwin Date: Wed, 11 Dec 2024 14:13:33 -0500 Subject: [PATCH] demo'd situation where underlying types don't obey associativity --- sum.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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); }