Das erinnert mich fast schon an ein Coding-Rätsel :-)
Eine (getestete und funktionierende) Lösung ist:
#include <iostream>
using namespace std;
int* f = 0;
int main()
{
// Lambda-Ausdruck
[](void){[](void){[=](void){return !f && f ? [](void){cout << "Paradoxon!" << endl;}() : [](void){cout << "Gratulation!" << endl;}();}();}();}();
}
Theoretisch könntest Du auch in main()
noch ein void
einsetzen, was jedoch keinen Einfluss auf die Funktionalität hat. Dass man void
in leere Parameterlisten bei der Deklaration schreiben kann, ist Geschmackssache. In die übrigen Klammern darf das nicht rein, weil es sich hierbei Aufrufe der Lambdas handelt.
Um den Leser maximal zu verwirren, kannst Du noch weitere Gleichheitsszeichen einstreuen:
#include <iostream>
using namespace std;
int* f = 0;
int main()
{
// Lambda-Ausdruck
[=](){[=](){[=](){return !f && f ? [](){cout << "Paradoxon!" << endl;}() : [](){cout << "Gratulation!" << endl;}();}();}();}();
}