\hypertarget{meta_2invoke_8h}{}\section{include/utl/meta/invoke.h File Reference}
\label{meta_2invoke_8h}\index{include/utl/meta/invoke.\+h@{include/utl/meta/invoke.\+h}}
{\ttfamily \#include $<$utl/core/impl.\+h$>$}\newline
{\ttfamily \#include $<$utl/meta/integral.\+h$>$}\newline
{\ttfamily \#include $<$utl/meta/detection.\+h$>$}\newline
{\ttfamily \#include $<$utl/meta/operations.\+h$>$}\newline
\subsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1identity}{utl\+::meta\+::identity$<$ \+\_\+\+Tp $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1wrap}{utl\+::meta\+::wrap$<$ F $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1wrap__i}{utl\+::meta\+::wrap\+\_\+i$<$ T, F $>$}}
\begin{DoxyCompactList}\small\item\em Wrap a template {\ttfamily F} taking literal constants of type {\ttfamily T} into an Invokable. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1is__applicable__}{utl\+::meta\+::detail\+::is\+\_\+applicable\+\_\+$<$ F, T $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1is__applicable__q__}{utl\+::meta\+::detail\+::is\+\_\+applicable\+\_\+q\+\_\+$<$ F, T $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1is__applicable__i__}{utl\+::meta\+::detail\+::is\+\_\+applicable\+\_\+i\+\_\+$<$ T, F, Is $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1defer__}{utl\+::meta\+::detail\+::defer\+\_\+$<$ F, Ts $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1defer__i__}{utl\+::meta\+::detail\+::defer\+\_\+i\+\_\+$<$ T, F, Is $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1quote}{utl\+::meta\+::quote$<$ F $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1quote__i}{utl\+::meta\+::quote\+\_\+i$<$ T, F $>$}}
\begin{DoxyCompactList}\small\item\em Wrap a template {\ttfamily F} taking literal constants of type {\ttfamily T} into an Invokable. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose__f__}{utl\+::meta\+::detail\+::compose\+\_\+f\+\_\+$<$ Fns $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose__f___3_01_fn0_00_01_fns_8_8_8_01_4}{utl\+::meta\+::detail\+::compose\+\_\+f\+\_\+$<$ Fn0, Fns... $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose__f___3_01_fn0_01_4}{utl\+::meta\+::detail\+::compose\+\_\+f\+\_\+$<$ Fn0 $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose__}{utl\+::meta\+::detail\+::compose\+\_\+$<$ Fns $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose___3_01_fn0_00_01_fns_8_8_8_01_4}{utl\+::meta\+::detail\+::compose\+\_\+$<$ Fn0, Fns... $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1detail_1_1compose___3_01_fn0_01_4}{utl\+::meta\+::detail\+::compose\+\_\+$<$ Fn0 $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1bind__front}{utl\+::meta\+::bind\+\_\+front$<$ Fn, Ts $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1bind__back}{utl\+::meta\+::bind\+\_\+back$<$ Fn, Ts $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1same__as}{utl\+::meta\+::same\+\_\+as$<$ T1 $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1same__as_1_1apply}{utl\+::meta\+::same\+\_\+as$<$ T1 $>$\+::apply$<$ T2 $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1not__same__as}{utl\+::meta\+::not\+\_\+same\+\_\+as$<$ T1 $>$}}
\item 
struct \mbox{\hyperlink{structutl_1_1meta_1_1not__same__as_1_1apply}{utl\+::meta\+::not\+\_\+same\+\_\+as$<$ T1 $>$\+::apply$<$ T2 $>$}}
\end{DoxyCompactItemize}
\subsection*{Namespaces}
\begin{DoxyCompactItemize}
\item 
 \mbox{\hyperlink{namespaceutl}{utl}}
\begin{DoxyCompactList}\small\item\em S\+TL\textquotesingle{}s core language concepts. \end{DoxyCompactList}\item 
 \mbox{\hyperlink{namespaceutl_1_1meta}{utl\+::meta}}
\item 
 \mbox{\hyperlink{namespaceutl_1_1meta_1_1detail}{utl\+::meta\+::detail}}
\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{Indent}\textbf{ meta\+:\+:invoke}\par
{\em A meta-\/programming \mbox{\hyperlink{namespaceutl_adc675874b5426194d04112f76b356714}{invoke()}} analogous. A {\ttfamily meta\+::invocable} shall contain a nested template type named {\bfseries apply} which is bind to actual invocable meta-\/function.


\begin{DoxyItemize}
\item We can use {\ttfamily wrap$<$$>$} or even better {\ttfamily quote$<$$>$} in order to wrap a metafunction to a type (metafunction class)
\item We can pass these wrapped types to other metafunctions
\item We can {\ttfamily invoke$<$$>$} the inner {\ttfamily apply} from a wrapped metafunction class. 
\end{DoxyItemize}}\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename \+\_\+\+Tp $>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a63c0b6b08f4c1d9bd3c4db7432e9b2af}{utl\+::meta\+::identity\+\_\+t}} = eval$<$ identity$<$ \+\_\+\+Tp $>$ $>$
\begin{DoxyCompactList}\small\item\em identity type alias \end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\textbf{ }\par
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename Fn , typename... Args$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a77630cd8adc01f7193f6cb834313d90f}{utl\+::meta\+::invoke}} = typename Fn\+::template apply$<$ Args... $>$
\item 
{\footnotesize template$<$typename Fn , typename... Args$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_ac27f3e5f3ec42921d9f8a6bb85560cf1}{utl\+::meta\+::invoke\+\_\+t}} = eval$<$ invoke$<$ Fn, Args... $>$ $>$
\end{DoxyCompactItemize}

\textbf{ }\par
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$template$<$ typename... $>$ class F, typename... T$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a695a94a2bbe51b0d0eec9bf82214d094}{utl\+::meta\+::is\+\_\+applicable\+\_\+t}} = eval$<$ detail\+::is\+\_\+applicable\+\_\+$<$ F, T... $>$ $>$
\begin{DoxyCompactList}\small\item\em check if we can instantiate {\ttfamily F} with parameters {\ttfamily T} \end{DoxyCompactList}\item 
{\footnotesize template$<$typename Q , typename... T$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a52c0afa73f63dc889e44cc6cc180f1f8}{utl\+::meta\+::is\+\_\+applicable\+\_\+qt}} = eval$<$ detail\+::is\+\_\+applicable\+\_\+q\+\_\+$<$ Q, T... $>$ $>$
\begin{DoxyCompactList}\small\item\em check if we can invoke {\ttfamily Q} with parameters {\ttfamily T} \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T , template$<$ T... $>$ class F, T... Is$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_add602488265f07c7a3080355350cda70}{utl\+::meta\+::is\+\_\+applicable\+\_\+it}} = eval$<$ detail\+::is\+\_\+applicable\+\_\+i\+\_\+$<$ T, F, Is... $>$ $>$
\begin{DoxyCompactList}\small\item\em check if we can instantiate {\ttfamily F} with parameters {\ttfamily Is} of type {\ttfamily T} \end{DoxyCompactList}\end{DoxyCompactItemize}

\textbf{ }\par
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$template$<$ class... $>$ class F, class... Ts$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a48f9a1220931596a9652351d2e7242be}{utl\+::meta\+::defer}} = if\+\_\+$<$ detail\+::is\+\_\+applicable\+\_\+$<$ F, Ts... $>$, detail\+::defer\+\_\+$<$ F, Ts... $>$, nil\+\_\+ $>$
\begin{DoxyCompactList}\small\item\em defer alias template for F$<$\+Ts...$>$ \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T , template$<$ T... $>$ class F, T... Is$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a01f183f337439e414184beedc9bcf9e3}{utl\+::meta\+::defer\+\_\+i}} = if\+\_\+$<$ detail\+::is\+\_\+applicable\+\_\+i\+\_\+$<$ T, F, Is... $>$, detail\+::defer\+\_\+i\+\_\+$<$ T, F, Is... $>$, nil\+\_\+ $>$
\begin{DoxyCompactList}\small\item\em defer\+\_\+i alias template for F$<$\+T, Is...$>$ \end{DoxyCompactList}\end{DoxyCompactItemize}

\textbf{ }\par
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename... Fns$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a4f0c06cabe66bc73b703eb8509c7bb07}{utl\+::meta\+::compose}} = detail\+::compose\+\_\+$<$ Fns... $>$
\item 
{\footnotesize template$<$template$<$ typename... $>$ class... Fns$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a729294327829b3068632da1235dc3090}{utl\+::meta\+::compose\+\_\+f}} = detail\+::compose\+\_\+f\+\_\+$<$ Fns... $>$
\end{DoxyCompactItemize}

