замечательный вопрос на кворе: почему бы гуглу не сделать свой IDE типа Visual Studio.
случайно посмотрел на ответы, они забавные.
заодно страничка показала мне простое уравнение и попыталась отвлечь озорными скидками:

но можно подумать эти ваши скидки когда-нибудь мешали бете альфы вольфрама:

та-дам!

впрочем, это заставило вспомнить что меня так зацепило вчера.

вчера в совершенно невинном вопросе про битовые поля я внезапно наткнулся на знакомого персонажа в колосящейся ржи.
тернарный оператор рваными зигзагами убегал за горизонт, но из его узкой бездонной расселины на меня немигающе смотрели глаза Ангела С++, знакомые нам по будущим сериям.

действительно, возьмем совершенно обычный случай создания временных объектов.

“When initializing a const reference from a bit field, a temporary is created (its type is the type of the bit field), copy initialized with the value of the bit field, and the reference is bound to that temporary.” (8.5.3/5)

и оно совершенно очевидно что иначе и быть не может, и я этим пользовался почти всегда.

и я спокойно перечитывал пропоузалы и лакомился новшествами в парсинге С++20:

int a;
struct foo {
  int y1 : true ? 8 : a = 42;
  int z : 1 || new int { 0 };
};

когда вдруг из lvalue битового поля на меня набросился тернарный оператор.

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

авторы clang оказались большими озорниками и научили clang выдавать ошибки типа
“я страус, идите все в сад, я не буду даже пытаться это компилировать” (LLVMbug 13809)

prog.cpp:4:2: error: cannot compile this conditional operator yet
        f.w ? f.w : f.w;

это в ответ на простой как слеза ягненка годболт:

struct foo { int x : 2, y : 2, z : 2, w : 2; };
int main() {
	foo f {};
	f.w ? f.w : f.w;
}

и это ведь мы даже не еще не перешли к подготовительной фазе типа “кто тут у нас lvalue”:

++(f.x ? f.y : f.z);

и к решающей фазе типа “ну давайте уже в 2017 будем С++17”:

(f.x ? f.y : f.z) = (f.x++) + 2;

обращу внимание, что цитата стандарта выше – она про const T&, то есть например когда мы внезапно пишем втупую:

template<typename U>
const U& boo(const U& a, const U& b, const U& c) { return a ? b : c; }
// ...
boo(f.x, f.y, f.z);  // насоздавали копий битовых полей и счастливы.

а вот подготовительные и решительные фазы –
они про тот самый реальный мимолетный битфилдный lvalue которого нет но который как бы есть, и про возможность которого понятное дело как обычно знает примерно три с половиной человека на планете.

знает, но не говорит.

gcc в этом смысле совершенно зубодробилен и работает на ура, и действительно инкрементирует ровно то битовое поле что нужно:
tio.run

// ++(f.x ? f.y : f.z);
0 0 0 0
0 0 1 0

@Max Fedorov: За такой кот и ЕА придется вводить пожизненный найм.
вот так примерно пишут библиотеки по вычислительной геометрии.

@aruslan: вот кстати по поводу вычислительной геометрии и вопроса выше:
а сколько вообще корней у всяких уравнений с дробными степенями?
иными словами, ок, вольфрам альфа подтвердил мое подозрение что x = 49.
и даже нарисовал график на действительной плоскости.
но ведь корень может возращать комплексные значения. и вообще.

вот тупо заменяем sqrt() на ^(2/3) потому что почему бы и нет, и сразу два корня:
один вещественный.
и один – очень очень почти вещественный. image (link)

и сразу вопрос – почему два корня.

или давайте вообще везде воткнем i, и в степень и к x,
и в результат: (x+15)^(9/5i) + (ix)^(9/5) = 15i
– почему опять два корня? (proof)

я думал там должны уже получаться периодические функции.
и всячески пересекаться под изящными углами.

расскажите что ли, у кого основное образование было не в подворотне и не на баяне?
тот случай когда я даже не знаю какие слова в запрос в гугл вставить.
а то вот тут аж пять корней: x^3 + x^17 = sqrt(x)
но вот x^7 + (1/3)^x = 15 почему-то два корня.
не, ну люди, вот почему у x^i + i^x = 15 всего четыре корня?? (proof)

ых.
ладно, пора открывать поверпойнт и создавать будущее.
/ме вдохновенно устремил взор вдаль.

(оригинал на кружках)