http://coliru.stacked-crooked.com/a/fba5b7b3b253288d
#include <iostream>
#include <string>
struct table {
std::string s;
table() {}
~table() { std::cout << this->s; }
table(const int n) : s{std::to_string(n)} {}
table(std::string&& s_) : s{std::move(s_)} {}
table(table&& other) : s{other.take()} {}
table operator=(const int n) { return this->take() + " = " + std::to_string(n); }
table operator=(table&& rhs) { return this->take() + " = " + rhs.take(); }
std::string take() { const auto s = this->s; this->s.clear(); return s; }
bool empty() const { return this->s.empty(); }
const char& back() const { return this->s.back(); }
};
table operator++(table&& t, int) { return t.take(); }
table operator