Iros
 
Loading...
Searching...
No Matches
ssize.h
Go to the documentation of this file.
1#pragma once
2
8#include "di/meta/language.h"
9
10namespace di::container {
11struct SSizeFunction;
12
13namespace detail {
14 template<typename T>
15 concept CustomSSize =
17
18 template<typename T>
19 concept SizeSSize = requires { typename meta::ContainerSizeType<T>; };
20}
21
23 template<typename T>
25 constexpr auto operator()(T&& container) const -> meta::MakeSigned<meta::ContainerSizeType<T>> {
26 if constexpr (detail::CustomSize<T>) {
27 return function::tag_invoke(*this, util::forward<T>(container));
28 } else {
29 return static_cast<meta::MakeSigned<meta::ContainerSizeType<T>>>(size(util::forward<T>(container)));
30 }
31 }
32};
33
34constexpr inline auto ssize = SSizeFunction {};
35}
36
37namespace di {
39}
Definition tag_invoke.h:45
Definition sequence.h:13
Definition sequence.h:12
constexpr auto ssize
Definition ssize.h:34
constexpr auto size
Definition size.h:54
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
decltype(container::size(util::declval< T >())) ContainerSizeType
Definition container_size_type.h:8
detail::MakeSignedHelper< RemoveCV< T > >::Type MakeSigned
Definition language.h:316
Definition zstring_parser.h:9
Definition ssize.h:22