	#include <iostream>
	#include <string>
	#include <vector>
	
	struct S {
		std::string s_;
		static std::vector<S> tiles;
		
		S() { std::cout << "S()\n"; init("default"); }
		S(const std::string& s) {
			std::cout << "S(" << (void*) this << " with " << s << ")\n";
			init(s);
		}
		S(const S& rhs) {
			std::cout << (void*) this << " copying " << (void*)&rhs << " (" << rhs.s_ << ")\n";
			s_ = rhs.s_;
			s_ += " copy";
		}
	
		void init(const std::string& s) {
			s_ = s;
			std::cout << "init " << (void*)this << " " << s_ << "\n";
			tiles.push_back(*this);  // makes copy
		}
	};
	
	
	std::vector<S> S::tiles = std::vector<S>(3);
	
	int main() {
		for (const auto& el : S::tiles) {
			std::cout << el.s_ << "\n";
		}
	}