Есть старая шутка, что программист на фортране будет писать на фортране на любом языке программирования.
Вот программа на 3 строки, которая компилируется любым C++11 компилятором, после этого нормально запускается и работает.
Пример в Online IDE
В принципе эту строку можно использовать как детектор на C++ программистов — не все сразу могут понять как это работает.
Пост был написан как социальный эксперимент. С моей точки зрения профессионал должен досконально разбираться в своем инструменте. Если вы догадались что происходит в коде — пишите в комментариях.
Чтобы не терять интригу объяснение под спойлером:
Вот программа на 3 строки, которая компилируется любым C++11 компилятором, после этого нормально запускается и работает.
int main(){
return !<:]()<%;[=:>(){<:&](){;%>();%>();};
}
Пример в Online IDE
В принципе эту строку можно использовать как детектор на C++ программистов — не все сразу могут понять как это работает.
Пост был написан как социальный эксперимент. С моей точки зрения профессионал должен досконально разбираться в своем инструменте. Если вы догадались что происходит в коде — пишите в комментариях.
Чтобы не терять интригу объяснение под спойлером:
Спойлер
Просто некоторые символы заменены диграфами.
Диграфы это часть языка и стандарта ISO C 99 Диграфы. Для С++ есль еще Триграфы. Правда в большинстве компиляторов C++ триграфы отключены по умолчанию. Но сишные диграфы включены.
Появились все эти *-графы потому, что семибитная кодовая страница ISO/IEC 646 (1972 г.) отводила некоторые символы [, ], {, }, ^, ~ под национальные, поэтому нужно было обеспечить совместимость исходного кода с новым стандартом. Так <: — это эквивалент открывающей квадратной скобки.
Время прошло, наступил 21 век, все стали использовать UTF-8, но в стандарте диграфы остались. И что самое отвратительное, во многих легаси проектах до сих пор встречаются. Так что не пугайтесь, увидев такое в старых исходниках
int main(){
return ![](){;
[=](){
[&](){;}();
}();
};
}
Просто некоторые символы заменены диграфами.
Диграфы это часть языка и стандарта ISO C 99 Диграфы. Для С++ есль еще Триграфы. Правда в большинстве компиляторов C++ триграфы отключены по умолчанию. Но сишные диграфы включены.
Появились все эти *-графы потому, что семибитная кодовая страница ISO/IEC 646 (1972 г.) отводила некоторые символы [, ], {, }, ^, ~ под национальные, поэтому нужно было обеспечить совместимость исходного кода с новым стандартом. Так <: — это эквивалент открывающей квадратной скобки.
Время прошло, наступил 21 век, все стали использовать UTF-8, но в стандарте диграфы остались. И что самое отвратительное, во многих легаси проектах до сих пор встречаются. Так что не пугайтесь, увидев такое в старых исходниках