Опциональные члены шаблонного класса по requires
<Описание вашей идеи> Уже есть возможность определять функцию для шаблонного класса, только если какое-то выражение удовлетворяет requires clause:
double get_sample() const
requires requires (const T& t) { t.get_sample(); }
{
return t.get_sample();
}
Нужно иметь возможность делать так же для членов класса, то есть иметь или не иметь данное поле согласно условию:
template<typename T>
class Sampler {
// ...
private:
double sample_ requires requires (const T& t) { t.get_sample(); };
int kek_ requires std::integral<T>;
}
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше> Везде, где из-за свойств шаблонной сущности меняется размер класса. Например делетеры в умных указателях (а-ля std::unique_ptr). Или отсутствие поля "size", если он указан в шаблоне (а-ля std::span).
В догонку тогда и локальные переменные туда же.
int a requires requires{ sizeof(T) > 10 } = 10;
if constexpr(sizeof(T)>10) {
std::count << a;
}
Члены класса можно решить сегодня через опциональное наследование. Не так изящно но решаемо.
Лучше бы runtime requires был-бы типа if но проверял переменную при её любых изменениях. int rc=0; assume (rc==0) else { return rc; } rc=fn1(args); rc=fn2(args); ...