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

#cpp26

План по улучшению средств метапрограммирования в C++26


Читая принятый в C++26 пропозал «Pack Indexing» (P2662) (и даже уже реализованный в clang 19!), делающий возможным следующий код:

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);
]


Внезапно обнаружил существование пропозала с таким интригующим названием как «A plan for better template meta programming facilities in C++26» за авторством многих видных комитетчиков, ставящего цель протащить в стандарт вместе с уже принятым «Pack Indexing» такие пропозалы как

1. «Generalized pack declaration and usage» (P1858)

namespace xstl {
template <typename... Ts>
struct tuple {
Ts... elems;
}
}
xstl::tuple tup{1, 2, 3};


2. Reflection for C++26 (P2996)

constexpr auto r = ^int
typename[:r:] x = 42; // Same as: int x = 42;
typename[:^char:] c = '*'; // Same as: char c = '*';


3. Universal Template Parameters (P1985)

template <template auto> struct takes_anything { };
int main() {
takes_anything<int> a;
takes_anything<1> b;
}


Планы Наполеновские, но смотря на то, как живо комитет начал голосовать за продвижение хоть какой-то рефлексии в C++26... Невольно думаешь, что все возможно.

А какие из этих пропозалов вы бы хотели видеть в стандарте больше всего? Или, может, вы мечтаете о чем-то другом?
👍8
January 31, 2024 1.1K 2 2