¿Qué es esta expresión de sonriente con barba: "<:]{%>"?


Me encontré con el siguiente programa, que compila sin errores ni advertencias:

int main(){
  <:]{%>; // smile!
}

Ejemplo en vivo.

¿Qué hace el programa y qué es esa expresión sonriente?

Author: Xeo, 2013-04-01

4 answers

Eso es una lambda vacía usando un disfraz de dígrafo. Las lambdas normales no tienen barba.

 287
Author: R. Martinho Fernandes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-01 00:56:06

El programa usa dígrafos para representar lo siguiente:

[] {};

Esta es una expresión lambda que no hace nada. Los símbolos correspondientes tienen estos equivalentes:

<: = [
%> = }

Aunque hoy en día son generalmente innecesarios, los dígrafos son útiles cuando su teclado carece de ciertas teclas necesarias para usar el conjunto de caracteres de origen básico de C++, a saber, las gráficas. La combinación de los caracteres que componen un dígrafo se procesa como un único token. Esto a su vez compensa para cualquier teclado insuficientemente equipado u otro hardware o software.

 347
Author: 0x499602D2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-03 15:17:03

El programa está utilizando dígrafos, que permiten la programación en C++ con teclados (o codificaciones de texto) que pueden no tener los caracteres que utiliza normalmente C++.

El código resuelve esto:

int main(){
  []{}; // smile!
}
 62
Author: Drew Dormann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-22 14:47:24
int main(){
  <:]{%>; // smile!
}

Es básicamente una expresión Lambda (la expresión Lambda es una de las características de C++11) usando dígrafos (ambos dígrafos y trigrafos funcionan en C++):

[] {};

Usando solo dígrafos:

<:]<%}; 

<:]<%%>;

[:>{%>; // like my cubic hat?

[:><%};

[:><%%>;

Mezclándolos con Trigraphs:

<:??)<%??>; // popeye

??(:>{??>; // pirate
 56
Author: Khaled.K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-03 11:45:28