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