\hypertarget{useif_8h}{}\section{include/utl/meta/useif.h File Reference}
\label{useif_8h}\index{include/utl/meta/useif.\+h@{include/utl/meta/useif.\+h}}


Template meta-\/programming S\+F\+I\+N\+AE helpers.  


{\ttfamily \#include $<$utl/core/impl.\+h$>$}\newline
{\ttfamily \#include $<$utl/meta/operations.\+h$>$}\newline
{\ttfamily \#include $<$utl/meta/sfinae.\+h$>$}\newline
\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}}
\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
{\footnotesize template$<$typename \+\_\+\+T1 , typename \+\_\+\+T2 , typename \+\_\+\+Ret  = \+\_\+\+T1$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a7b4ba22b3afb3e7a98e1012a350cb573}{utl\+::meta\+::use\+\_\+if\+\_\+same\+\_\+t}} = enable\+\_\+if\+\_\+t$<$ same\+\_\+$<$ \+\_\+\+T1, \+\_\+\+T2 $>$\+::value, \+\_\+\+Ret $>$
\begin{DoxyCompactList}\small\item\em If same type resolves to \+\_\+\+Ret, else S\+F\+I\+N\+AE. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename \+\_\+\+T1 , typename \+\_\+\+T2 , typename \+\_\+\+Ret  = \+\_\+\+T1$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_af590469269a8c378d937d8d75ee96e8c}{utl\+::meta\+::use\+\_\+if\+\_\+not\+\_\+same\+\_\+t}} = enable\+\_\+if\+\_\+t$<$ !same\+\_\+$<$ \+\_\+\+T1, \+\_\+\+T2 $>$\+::value, \+\_\+\+Ret $>$
\begin{DoxyCompactList}\small\item\em If not same type resolves to \+\_\+\+Ret, else S\+F\+I\+N\+AE. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T1 , typename... Ts$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_ad0394846551cd881782e46d2d05190de}{utl\+::meta\+::use\+\_\+if\+\_\+any\+\_\+t}} = enable\+\_\+if\+\_\+t$<$ or\+\_\+$<$ T1, Ts... $>$\+::value, T1 $>$
\begin{DoxyCompactList}\small\item\em If any type (\+\_\+\+T1 or \+\_\+\+T2) type resolves to \+\_\+\+Ret, else to S\+F\+I\+N\+AE. \end{DoxyCompactList}\item 
{\footnotesize template$<$typename T1 , typename... Ts$>$ }\\using \mbox{\hyperlink{namespaceutl_1_1meta_a52ff6257bf079904f9cb51a65f5a7397}{utl\+::meta\+::use\+\_\+if\+\_\+all\+\_\+t}} = enable\+\_\+if\+\_\+t$<$ and\+\_\+$<$ T1, Ts... $>$\+::value, T1 $>$
\begin{DoxyCompactList}\small\item\em If both type (\+\_\+\+T1 and \+\_\+\+T2) type resolves to \+\_\+\+Ret, else to S\+F\+I\+N\+AE. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Template meta-\/programming S\+F\+I\+N\+AE helpers. 

Copyright (C) 2018 Christos Choutouridis

This program is free software\+: you can redistribute it and/or modify it under the terms of the G\+NU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but W\+I\+T\+H\+O\+UT A\+NY W\+A\+R\+R\+A\+N\+TY; without even the implied warranty of M\+E\+R\+C\+H\+A\+N\+T\+A\+B\+I\+L\+I\+TY or F\+I\+T\+N\+E\+SS F\+OR A P\+A\+R\+T\+I\+C\+U\+L\+AR P\+U\+R\+P\+O\+SE. See the G\+NU Lesser General Public License for more details.

You should have received a copy of the G\+NU Lesser General Public License along with this program. If not, see \href{http://www.gnu.org/licenses/}{\tt http\+://www.\+gnu.\+org/licenses/}. 