...;
Я его использую как
template <foo T>
void f(T& value);
Теперь я хочу, чтобы f принимала forwarding reference на T
Я могу написать
template <class T> requires foo<std::remove_cvref_t<T>>
void f(T&& value)
но это некрасиво. Как можно запихнуть эту конструкцию в <..>? В идеале, нужна композиция концептов, чтобы можно было шаблонизировать концепты концептами.. типа:
template <unref<foo> T>
Какие есть варианты решения?
Концепты не могут быть template template параметрами
это я понимаю, но возможно есть какие-то иные способы решить мою задачу элегантно
Можно сделать обёртку template <typename T> struct foo_trait { constexpr static bool value = foo_concept<T>; };
Не понял, как это поможет
Сделать обёртку над концептом, чтобы она стала трейтом, а его уже пропихивать в шаблонный шаблонный параметр? Идея хорошая, но для каждого концепта по обёртке - это всё ещё много
Можно макросом генерацию зафигачить :)))
Обсуждают сегодня