Speaking of Quines, I was playing around with a self-referencing program a few weeks ago. I could get it to output its source code via a simple print function, but if I copy/pasted the printed source code, it wouldn't result in the same program anymore because the next compiled generation wouldn't be able to print itself. It's a perplexing problem. It reminds me of looking into the world within two mirrors reflecting each other infinitely.
I'm currently thinking that the problem is that my language is compiled. If instead I wrote my program in binary, I could instruct the program to read its own binary code and output the results (which would pretty much be a way to clone/copy yourself). Then I'd be able to run the clone and repeat the command for as many generations as I'd like.
The other approach I was thinking of was adding the C++ compiler as an embedded resource within the compiled executable. Then, the app could just print its source code and run it through the compiler, and somehow splice in its source code into the source code again, thus being able to self-compile and run as many generations as desired. What an interesting problem to contemplate