Macro DEBUG del preprocesador

En este desafío no debes escribir una función, sino dos macros del preprocesador C/C++. Se suponía que debía ser una sola macro, pero, como no hay acceso directo al compilador ni a los archivos fuente, no fue posible.

De todos modos, estas macros deben ser macros simples de depuración. La primera (DOUT) imprime/transmite la entrada que recibe a std::cout. La segunda (NDOUT) ignora toda la entrada y no hace nada.

Estas macros deben ser macros tipo función. Cada una recibe un argumento, que puede incluir operadores de flujo ( operator<< ). Después de cada uso de estas macros hay un punto y coma: DOUT( /* input */ );

Ejemplos

DOUT( "Hello " << "World!" ); ➞ "Hello World!"

DOUT( 1 << '+' << 2 << '=' << 1+2 ); ➞ "1+2=3"

NDOUT( "Hello" << "World!" ); ➞ ""

Notas

  • Recuerda transmitir la salida a std::cout. No uses printf ni nada más. No intentes devolver una cadena.
  • Para extender las definiciones de macros a varias líneas, puedes usar barras invertidas \ como último carácter de una línea:
#define N \
123

std::cout << N << std::endl;         // prints "123"

Nada importante

Mi plan original era compilar condicionalmente la macro DOUT según si DEBUG estaba definido o no ( ➞ #ifdef ... ). Como se mencionó anteriormente, eso no fue posible, ya que no tengo acceso a los archivos fuente de tu código ni de las pruebas, ni al compilador. Por eso debes implementar dos macros distintas y no solo una.