8#include "indep/helper/tmedium.inl"
18 template <
typename T>
class tmay:
private std::optional<T> {
19 BY(ME(
tmay, std::optional<T>))
30 const T* operator->()
const BY_CONST_FUNC(operator->());
33 const T& operator*()
const BY_CONST_FUNC(
operator*());
36 operator const T&()
const;
38 operator nbool()
const;
44 const T* get()
const BY_CONST_FUNC(get())
48 virtual void set(
const T& arg);
52 template <
typename T,
typename F>
tmedium<T> operator|(T* t, F&& f) {
59 template <
typename T,
typename F> tmedium<T> operator|(
const T* t, F&& f) {
66 template <
typename T,
typename F> T& operator|(tmay<T>& t, F&& f) {
73 template <
typename T,
typename F>
const T& operator|(
const tmay<T>& t, F&& f) {
80 template <
typename T,
typename F> tmay<T> operator|(tmay<T>&& t, F&& f) {
89 static nbool isNul(
const tmay<T>& it) {
return !it.has(); }
91 static constexpr nbool is_ptr =
false;
92 static constexpr nbool is_ref =
false;
93 static constexpr nbool is_like_ptr =
true;
97 static nbool isNul(
const tmay<T>& it) {
return !it.has(); }
99 static constexpr nbool is_ptr =
false;
100 static constexpr nbool is_ref =
true;
101 static constexpr nbool is_like_ptr =
true;
105 template <
typename T,
typename F>
106 auto operator->*(
tmay<T>& t, F&& f) ->
decltype(
typeTrait<
decltype(f(*t))>::ret()) {
107 return t ? f(*t) :
typeTrait<decltype(f(*t))>::ret();
110 template <
typename T,
typename F>
111 auto operator->*(
const tmay<T>& t, F&& f) ->
decltype(typeTrait<
decltype(f(*t))>::ret()) {
112 return t ? f(*t) : typeTrait<decltype(f(*t))>::ret();
115 template <
typename T,
typename F>
116 auto operator->*(tmay<T>&& t, F&& f) ->
decltype(typeTrait<
decltype(f(*t))>::ret()) {
117 return t ? f(*t) : typeTrait<decltype(f(*t))>::ret();
Optional value wrapper with byeol-style interface.
Definition: tmay.hpp:18
Medium class used exclusively in the OR macro for safe reference handling.
Definition: tmedium.hpp:51
Type trait utilities for template metaprogramming.
Definition: typeTrait.hpp:13