Недавно просматривал журнал "Хакер" за июль 2007-го. На странице 120 с интересом прочитал статью "Трюки от крыса", в которой описывались диграфы и триграфы языка Си. Для тех, кто не в курсе: триграфы - это трёхбуквенные, а диграфы - двухбуквенные эквиваленты некоторого символа. Например:
(XX-граф) = (символ)
??= = #
??( = [
??< = {
<: = [
<% = {
%: = #
Эти комбинации (и некоторые другие) описаны в стандарте языка Си и, естественно, по-разному обрабатываются разными промышленными компиляторами.
В статье указывалось, что при использовании диграфа <: совместно с шаблонами в Си++ возможна такая коллизия: std::vector<::X транслируется сначала в std::vector[:X, после чего компиляция завершается с ошибкой.
В конце статьи автор пишет: "В действительности это не баг. Это фича! И теперь ты знаешь, как с ней обращаться". Остаётся только пожелать Си-программистам побольше таких фич и новых, интересных открытий каждый день.