План по улучшению средств метапрограммирования в 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... Невольно думаешь, что все возможно.
А какие из этих пропозалов вы бы хотели видеть в стандарте больше всего? Или, может, вы мечтаете о чем-то другом?
