...
This commit is contained in:
@@ -67,6 +67,25 @@ concept adc_range_of_output_char_range =
|
||||
template <typename R>
|
||||
concept adc_range_of_view_or_output_char_range = adc_range_of_view_char_range<R> || adc_output_char_range<R>;
|
||||
|
||||
|
||||
template <adc_char_range R>
|
||||
struct adc_char_identity {
|
||||
template <adc_char_range T>
|
||||
requires std::same_as<R, T>
|
||||
constexpr T&& operator()(T&& v) // like std::identity
|
||||
{
|
||||
return std::forward<T>(v);
|
||||
}
|
||||
|
||||
template <adc_char_range T>
|
||||
requires(!std::same_as<R, T> &&
|
||||
std::is_constructible_v<R, std::ranges::iterator_t<T>, std::ranges::sentinel_t<T>>)
|
||||
constexpr R operator()(T&& v)
|
||||
{
|
||||
return {v.begin(), v.end()};
|
||||
}
|
||||
};
|
||||
|
||||
// deduce returned type of callable
|
||||
// template <typename T>
|
||||
// using adc_retval_t = std::invoke_result_t<std::remove_cvref_t<T>>;
|
||||
|
||||
Reference in New Issue
Block a user