Здравствуйте, Went, Вы писали:
W>Здравствуйте. Почитал тему, правда не стал углубляться в детали. Но возникла такая простая мысль. Может, она и баян, ткните.
W>Почему бы не ввести в С++ такое правило: "все, что может быть вычислено во время компиляции, вычисляется во время компиляции, если того требует контекст". То есть любой код, который не зависит от процесса исполнения, считается статически константным, а все его результаты — априори constexpr. Пара примеров:
W>W>template<typename T>
W>void f(T* px)
W>{
W> // Если px указывает на константу, функция не будет делать ничего, код внутри if выкинется.
W> if (!std::is_const<T>::value)
W> *px = 0;
W>}
W>
W>W>std::tuple<int, float, bool> tpl;
W>// Банально перебираем все члены туплы в цикле
W>for (size_t n = 0; n < std::tuple_type<decltype(tpl)>::value; ++ n)
W> std::cout << std::get<n>(tpl) << " ";
W>
W>Есть какие-то ограничения, не позволяющие компилятору сделать такое? При том что введение такого расширения вроде не должно сломать имеющийся код.
Есть ограничение, называется "Страуструп категорически против". Я спросил у него что он думает о предложенном Александреску static if-е, он на меня чуть не накинулся с кулаками — настолько ему эта идея не нравится. Так что не в этой жизни