C++ Moscow: post #86 — TG.ME

#proposals #wg21

Trip report: Autumn ISO C++ standards meeting (Kona, HI, USA)

Чуть больше, чем неделю назад, появились первые трип-репорты с недавней встречи WG21 (Комитет по стандартизации C++) в Коне

По ее итогам в C++26 вошли:

1. Возможность обращения к parameter pack'ам как к массивам (P2662R3)

template <typename... T>
constexpr auto first_plus_last(T... values) -> T...[0] {
    return T...[0](values...[0] + values...[sizeof...(values)-1]);
}

int main() {
    static_assert( first_plus_last(1, 2, 10) == 11 );
}


2. Огромное количество функций линейной алгебры в стиле фортрановского BLAS, <linalg> (P1673R13)

template<in-matrix InMat, class Triangle, in-vector InVec, out-vector OutVec>
void cholesky_solve(InMat A, Triangle t, InVec b, OutVec x)
{
using std::linalg::explicit_diagonal, std::linalg::transposed, std::linalg::triangular_matrix_vector_solve;

if constexpr (std::is_same_v<Triangle, upper_triangle_t>) {
// Solve Ax=b where A = U^T U. Solve U^T c = b, using x to store c.
triangular_matrix_vector_solve(transposed(A),
opposite_triangle(t), explicit_diagonal, b, x);
// Solve U x = c, overwriting x with result.
triangular_matrix_vector_solve(A, t, explicit_diagonal, x);
}
else {
// ...
}
}
3. Более удобный и безопасный способ форматирования рантаймовых строк (P2905R2, P2918R2)

// Before:
std::vformat(str, std::make_format_args(42));
// After:
std::format(std::runtime_format(str), 42);
4. Возможность создания в рантайме точек останова для отладки, <debugging> (P2546R5)

// Здесь мы хотим переключиться в отладчик
std::breakpoint_if_debugging();
// А здесь мы из него возвращаемся
И многое, более мелкое, другое.

Как вы думаете, комитет тратит свои силы на стоящие вещи? И что бы хотели видеть вы в C++26?
😱8👍4
November 23, 2023 721 7 6