fork download
  1. #include <iostream>
  2.  
  3. template<typename T>
  4. struct CustomMessage
  5. {
  6. const T& t;
  7. CustomMessage(const T& t) : t(t)
  8. {}
  9. };
  10.  
  11. struct DefaultMessage
  12. {
  13. template<typename T> CustomMessage<T> operator() (const T& t)
  14. {
  15. return {t};
  16. }
  17. };
  18. template<typename T>
  19. std::ostream& operator<< (std::ostream& os, const CustomMessage<T>& message)
  20. {
  21. return os << message.t;
  22. }
  23.  
  24. std::ostream& operator<< (std::ostream& os, const DefaultMessage& message)
  25. {
  26. return os << "no paren\n";
  27. }
  28.  
  29. using namespace std;
  30.  
  31. #define FOO std::cout << DefaultMessage{}
  32.  
  33. int main() {
  34. int x = 42;
  35. FOO;
  36. FOO(x);
  37. return 0;
  38. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
no paren
42