Что это за выражение "смайлик с бородой": "<:] {%>"?

Я наткнулся на следующую программу, которая компилируется без ошибок или даже предупреждений:

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

Пример в реальном времени.

Что делает программа, и что это за смайлик-выражение?

Ответ 1

То, что пустая лямбда, использующая орграф, маскируется. Нормальные лямбды не имеют бороды.

Ответ 2

В программе используется digraphs, чтобы представить следующее:

[] {};

Это выражение лямбда, которое ничего не делает. Соответствующие символы имеют следующие эквиваленты:

<: = [
%> = }

Хотя сегодня они вообще не нужны, орграфы полезны, когда на вашей клавиатуре не хватает определенных ключей, необходимых для использования базового набора символов С++, а именно графических. Комбинация символов, составляющих орграф, обрабатывается как один токен. Это, в свою очередь, компенсирует любые недостаточно оборудованные клавиатуры или другое подобное оборудование или программное обеспечение.

Ответ 3

Программа использует digraphs, которые позволяют программировать на С++ с клавиатурами (или текстовыми кодировками), которые могут не иметь символов С++ обычно используется.

Код разрешает следующее:

int main(){
  []{}; // smile!
}

Ответ 4

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

В основном выражение Lambda (выражение Lambda является одним из C++11), используя digraphs (оба орграфа и триграфы работают на С++):

[] {};

Использование только орграфов:

<:]<%}; 

<:]<%%>;

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

[:><%};

[:><%%>;

Смешивание их с помощью триграфов:

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

??(:>{??>; // pirate