This commit is contained in:
Timur A. Fatkhullin
2024-10-20 01:29:08 +03:00
parent 0b3e80261b
commit 117d8c4a3d
4 changed files with 233 additions and 45 deletions

View File

@@ -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>>;