fork download
  1. #include <iostream>
  2.  
  3. class StringPrinter
  4. {
  5. const char* content;
  6. public:
  7. StringPrinter(const char* s) : content(s) { std::cout << '(' << content << ')' << std::endl; }
  8. ~StringPrinter() { std::cout << '[' << content << ']' << std::endl; }
  9. };
  10.  
  11. #define func(S) StringPrinter PASTE1(stringPrinterInstance, __LINE__) (S)
  12. #define PASTE1(T1, T2) PASTE2(T1, T2)
  13. #define PASTE2(T1, T2) T1 ## T2
  14.  
  15. int main()
  16. {
  17. func("1");
  18. func("2");
  19. func("3");
  20. func("whatever");
  21. }
Success #stdin #stdout 0s 2896KB
stdin
Standard input is empty
stdout
(1)
(2)
(3)
(whatever)
[whatever]
[3]
[2]
[1]