forked from boostorg/mp11
Update documentation
This commit is contained in:
1 parent
cae6f966dc
commit
9deb752095
6 files changed
+252
-46
No files matched your search
+162
-30
@@ -1354,6 +1354,9 @@ the list.</p>
|
||||
<p><code>mp_size<L></code> returns the number of elements in the list <code>L</code>, as a <code>mp_size_t</code>. In other words, <code>mp_size<L<T…​>></code> is an alias for
|
||||
<code>mp_size_t<sizeof…​(T)></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = mp_list<>;
|
||||
@@ -1394,6 +1397,9 @@ using R3 = mp_size<L3>; // mp_size_t<1></pre>
|
||||
<div class="paragraph">
|
||||
<p><code>mp_front<L></code> is the first element of the list <code>L</code>. That is, <code>mp_front<L<T1, T…​>></code> is an alias for <code>T1</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<int, float>;
|
||||
@@ -1423,6 +1429,9 @@ using R3 = mp_front<L3>; // char[1]</pre>
|
||||
<div class="paragraph">
|
||||
<p><code>mp_pop_front<L></code> removes the first element of the list <code>L</code>. That is, <code>mp_pop_front<L<T1, T…​>></code> is an alias for <code>L<T…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::tuple<float, double, long double>;
|
||||
@@ -1468,6 +1477,9 @@ using R2 = mp_pop_front<L2>; // mp_list<></pre>
|
||||
<div class="paragraph">
|
||||
<p><code>mp_second<L></code> is the second element of the list <code>L</code>. That is, <code>mp_second<L<T1, T2, T…​>></code> is an alias for <code>T2</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<int, float>;
|
||||
@@ -1497,6 +1509,9 @@ using R3 = mp_second<L3>; // char[2]</pre>
|
||||
<div class="paragraph">
|
||||
<p><code>mp_third<L></code> is the third element of the list <code>L</code>. That is, <code>mp_third<L<T1, T2, T3, T…​>></code> is an alias for <code>T3</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::tuple<float, double, long double>;
|
||||
@@ -1521,6 +1536,9 @@ using R2 = mp_third<L2>; // char[3]</pre>
|
||||
<p><code>mp_push_front<L, T…​></code> inserts the elements <code>T…​</code> at the front of the list <code>L</code>. That is, <code>mp_push_front<L<U…​>, T…​></code>
|
||||
is an alias for <code>L<T…​, U…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::tuple<double, long double>;
|
||||
@@ -1545,6 +1563,9 @@ using R2 = mp_push_front<L2, char[1], char[2]>; // mp_list<char[1], cha
|
||||
<p><code>mp_push_back<L, T…​></code> inserts the elements <code>T…​</code> at the back of the list <code>L</code>. That is, <code>mp_push_back<L<U…​>, T…​></code>
|
||||
is an alias for <code>L<U…​, T…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::tuple<double, long double>;
|
||||
@@ -1568,6 +1589,9 @@ using R2 = mp_push_back<L2, char[1], char[2]>; // mp_list<void, char[1]
|
||||
<div class="paragraph">
|
||||
<p><code>mp_rename<L, Y></code> changes the type of the list <code>L</code> to <code>Y</code>. That is, <code>mp_rename<L<T…​>, Y></code> is an alias for <code>Y<T…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<double, long double>;
|
||||
@@ -1592,6 +1616,9 @@ using R2 = mp_rename<L2, mp_list>; // mp_list<void></pre>
|
||||
<p><code>mp_apply<F, L></code> applies the metafunction <code>F</code> to the contents of the list <code>L</code>, that is, <code>mp_apply<F, L<T…​>></code> is an alias for <code>F<T…​></code>.
|
||||
(<code>mp_apply</code> is the same as <code>mp_rename</code> with the arguments reversed.)</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Example:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<double, long double>;
|
||||
@@ -1609,6 +1636,9 @@ using R1 = mp_apply<std::is_same, L1>; // std::is_same<double, long dou
|
||||
<div class="paragraph">
|
||||
<p>Same as <code>mp_apply</code>, but takes a quoted metafunction.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Example:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="highlight"><code>using L1 = std::tuple<double, long double>;
|
||||
@@ -1630,6 +1660,9 @@ using R1 = mp_apply_q<mp_bind_front<mp_push_back, L1>, L2>;
|
||||
<p><code>mp_append<L…​></code> concatenates the lists in <code>L…​</code> into a single list that has the same type as the first list. <code>mp_append<></code>
|
||||
is an alias for <code>mp_list<></code>. <code>mp_append<L1<T1…​>, L2<T2…​>, …​, Ln<Tn…​>></code> is an alias for <code>L1<T1…​, T2…​, …​, Tn…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Example:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="highlight"><code>using L1 = std::tuple<double, long double>;
|
||||
@@ -1652,6 +1685,9 @@ using R1 = mp_append<L1, L2, L3, L4>; // std::tuple<double, long double
|
||||
<p><code>mp_replace_front<L, T></code> replaces the first element of the list <code>L</code> with <code>T</code>. That is, <code>mp_replace_front<L<U1, U…​>, T></code> is
|
||||
an alias for <code>L<T, U…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<int, float>;
|
||||
@@ -1693,6 +1729,9 @@ using R3 = mp_replace_front<L3, void>; // mp_list<void, char[2], char[3
|
||||
<p><code>mp_replace_second<L, T></code> replaces the second element of the list <code>L</code> with <code>T</code>. That is, <code>mp_replace_second<L<U1, U2, U…​>, T></code>
|
||||
is an alias for <code>L<U1, T, U…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::pair<int, float>;
|
||||
@@ -1723,6 +1762,9 @@ using R3 = mp_replace_second<L3, void>; // mp_list<char[1], void, char[
|
||||
<p><code>mp_replace_third<L, T></code> replaces the third element of the list <code>L</code> with <code>T</code>. That is, <code>mp_replace_third<L<U1, U2, U3, U…​>, T></code>
|
||||
is an alias for <code>L<U1, U2, T, U…​></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using L1 = std::tuple<float, double, long double>;
|
||||
@@ -1776,15 +1818,23 @@ using R2 = mp_replace_third<L2, void>; // mp_list<char[1], char[2], voi
|
||||
<div class="paragraph">
|
||||
<p><code>mp_if_c<true, T, E…​></code> is an alias for <code>T</code>. <code>mp_if_c<false, T, E></code> is an alias for <code>E</code>. Otherwise, the result is a substitution failure.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R1 = mp_if_c<true, int, void>; // int
|
||||
using R2 = mp_if_c<flase, int, void>; // void</pre>
|
||||
<pre>using R1 = mp_if_c<true, int, void>; // int</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class I> using void_if_5 = mp_if_c<I::value == 5, void>; // `void` when `I::value` is 5, substitution failure otherwise</pre>
|
||||
<pre>using R2 = mp_if_c<flase, int, void>; // void</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class I> using void_if_5 = mp_if_c<I::value == 5, void>;
|
||||
// `void` when `I::value` is 5, substitution failure otherwise</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1792,7 +1842,8 @@ using R2 = mp_if_c<flase, int, void>; // void</pre>
|
||||
<h4 id="mp_if_c_t_e">mp_if<C, T, E…​></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class C, class T, class E...> using mp_if = mp_if_c<static_cast<bool>(C::value), T, E...>;</pre>
|
||||
<pre>template<class C, class T, class E...> using mp_if =
|
||||
mp_if_c<static_cast<bool>(C::value), T, E...>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -1815,7 +1866,8 @@ is to avoid evaluating <code>F<U…​></code> when the condition
|
||||
<h4 id="mp_eval_if_c_t_f_u">mp_eval_if<C, T, F, U…​></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class C, class T, template<class...> class F, class... U> using mp_eval_if = mp_eval_if_c<static_cast<bool>(C::value), T, F, U...>;</pre>
|
||||
<pre>template<class C, class T, template<class...> class F, class... U> using mp_eval_if =
|
||||
mp_eval_if_c<static_cast<bool>(C::value), T, F, U...>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -1826,7 +1878,8 @@ is to avoid evaluating <code>F<U…​></code> when the condition
|
||||
<h4 id="mp_eval_if_q_c_t_q_u">mp_eval_if_q<C, T, Q, U…​></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class C, class T, class Q, class... U> using mp_eval_if_q = mp_eval_if<C, T, Q::template fn, U...>;</pre>
|
||||
<pre>template<class C, class T, class Q, class... U> using mp_eval_if_q =
|
||||
mp_eval_if<C, T, Q::template fn, U...>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2135,7 +2188,8 @@ where <code>T</code> is the type of <code>N::value</code>.</p>
|
||||
<h4 id="mp_insert_c_l_i_t">mp_insert_c<L, I, T…​></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, std::size_t I, class... T> using mp_insert_c = mp_append<mp_take_c<L, I>, mp_push_front<mp_drop_c<L, I>, T...>>;</pre>
|
||||
<pre>template<class L, std::size_t I, class... T> using mp_insert_c =
|
||||
mp_append<mp_take_c<L, I>, mp_push_front<mp_drop_c<L, I>, T...>>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2146,7 +2200,8 @@ where <code>T</code> is the type of <code>N::value</code>.</p>
|
||||
<h4 id="mp_insert_l_i_t">mp_insert<L, I, T…​></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, class I, class... T> using mp_insert = mp_append<mp_take<L, I>, mp_push_front<mp_drop<L, I>, T...>>;</pre>
|
||||
<pre>template<class L, class I, class... T> using mp_insert =
|
||||
mp_append<mp_take<L, I>, mp_push_front<mp_drop<L, I>, T...>>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2157,7 +2212,8 @@ where <code>T</code> is the type of <code>N::value</code>.</p>
|
||||
<h4 id="mp_erase_c_l_i_j">mp_erase_c<L, I, J></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, std::size_t I, std::size_t J> using mp_erase = mp_append<mp_take_c<L, I>, mp_drop_c<L, J>>;</pre>
|
||||
<pre>template<class L, std::size_t I, std::size_t J> using mp_erase_c =
|
||||
mp_append<mp_take_c<L, I>, mp_drop_c<L, J>>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2168,7 +2224,8 @@ where <code>T</code> is the type of <code>N::value</code>.</p>
|
||||
<h4 id="mp_erase_l_i_j">mp_erase<L, I, J></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, class I, class J> using mp_erase = mp_append<mp_take<L, I>, mp_drop<L, J>>;</pre>
|
||||
<pre>template<class L, class I, class J> using mp_erase =
|
||||
mp_append<mp_take<L, I>, mp_drop<L, J>>;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2274,6 +2331,17 @@ for the elements of <code>L<U1…​></code> and <code>mp_false</c
|
||||
<div class="paragraph">
|
||||
<p><code>mp_sort<L, P></code> sorts the list <code>L</code> according to the strict weak ordering <code>mp_to_bool<P<T, U>></code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Example:</p>
|
||||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="highlight"><code>#include <ratio>
|
||||
|
||||
using L1 = mp_list<std::ratio<1,2>, std::ratio<1,4>>;
|
||||
using R1 = mp_sort<L1, std::ratio_less>; // mp_list<ratio<1,4>, ratio<1,2>></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect3">
|
||||
<h4 id="mp_find_l_v">mp_find<L, V></h4>
|
||||
@@ -2348,7 +2416,8 @@ is <code>mp_size<L></code>.</p>
|
||||
<h4 id="mp_all_of_l_p">mp_all_of<L, P></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, template<class...> class P> using mp_all_of = mp_bool< mp_count_if<L, P>::value == mp_size<L>::value >;</pre>
|
||||
<pre>template<class L, template<class...> class P> using mp_all_of =
|
||||
mp_bool< mp_count_if<L, P>::value == mp_size<L>::value >;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2359,7 +2428,8 @@ is <code>mp_size<L></code>.</p>
|
||||
<h4 id="mp_none_of_l_p">mp_none_of<L, P></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, template<class...> class P> using mp_none_of = mp_bool< mp_count_if<L, P>::value == 0 >;</pre>
|
||||
<pre>template<class L, template<class...> class P> using mp_none_of =
|
||||
mp_bool< mp_count_if<L, P>::value == 0 >;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2370,7 +2440,8 @@ is <code>mp_size<L></code>.</p>
|
||||
<h4 id="mp_any_of_l_p">mp_any_of<L, P></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class L, template<class...> class P> using mp_any_of = mp_bool< mp_count_if<L, P>::value != 0 >;</pre>
|
||||
<pre>template<class L, template<class...> class P> using mp_any_of =
|
||||
mp_bool< mp_count_if<L, P>::value != 0 >;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2481,7 +2552,8 @@ is <code>mp_size<L></code>.</p>
|
||||
<h4 id="mp_map_insert_m_t">mp_map_insert<M, T></h4>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>template<class M, class T> using mp_map_insert = mp_if< mp_map_contains<M, mp_first<T>>, M, mp_push_back<M, T> >;</pre>
|
||||
<pre>template<class M, class T> using mp_map_insert =
|
||||
mp_if< mp_map_contains<M, mp_first<T>>, M, mp_push_back<M, T> >;</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
@@ -2549,12 +2621,27 @@ replaces the existing element <code>L<X, Y…​></code> with <cod
|
||||
returns <code>mp_false</code>. If the application causes a substitution failure, returns <code>mp_false</code>. If all results are <code>mp_true</code>,
|
||||
returns <code>mp_true</code>. <code>mp_and<></code> is <code>mp_true</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R1 = mp_and<mp_true, mp_true>; // mp_true
|
||||
using R2 = mp_and<mp_false, void>; // mp_false, void is not reached
|
||||
using R3 = mp_and<mp_false, mp_false>; // mp_false
|
||||
using R4 = mp_and<void, mp_true>; // mp_false (!)</pre>
|
||||
<pre>using R1 = mp_and<mp_true, mp_true>; // mp_true</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R2 = mp_and<mp_false, void>; // mp_false, void is not reached</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R3 = mp_and<mp_false, mp_false>; // mp_false</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R4 = mp_and<void, mp_true>; // mp_false (!)</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2571,12 +2658,27 @@ using R4 = mp_and<void, mp_true>; // mp_false (!)</pre>
|
||||
is an error because <code>void</code> does not have a nested <code>value</code>. The upside is that <code>mp_all</code> is potentially faster and does not
|
||||
mask substitution failures as <code>mp_and</code> does.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R1 = mp_and<mp_true, mp_true>; // mp_true
|
||||
using R2 = mp_and<mp_false, void>; // compile-time error
|
||||
using R3 = mp_and<mp_false, mp_false>; // mp_false
|
||||
using R4 = mp_and<void, mp_true>; // compile-time error</pre>
|
||||
<pre>using R1 = mp_all<mp_true, mp_true>; // mp_true</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R2 = mp_all<mp_false, void>; // compile-time error</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R3 = mp_all<mp_false, mp_false>; // mp_false</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R4 = mp_all<void, mp_true>; // compile-time error</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2591,12 +2693,27 @@ using R4 = mp_and<void, mp_true>; // compile-time error</pre>
|
||||
<p><code>mp_or<T…​></code> applies <code>mp_to_bool</code> to the types in <code>T…​</code>, in order. If the result of an application is <code>mp_true</code>, <code>mp_or</code>
|
||||
returns <code>mp_true</code>. If all results are <code>mp_false</code>, returns <code>mp_false</code>. <code>mp_or<></code> is <code>mp_false</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R1 = mp_or<mp_true, mp_false>; // mp_true
|
||||
using R2 = mp_or<mp_true, void>; // mp_true, void is not reached
|
||||
using R3 = mp_or<mp_false, mp_false>; // mp_false
|
||||
using R4 = mp_or<void, mp_true>; // compile-time error</pre>
|
||||
<pre>using R1 = mp_or<mp_true, mp_false>; // mp_true</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R2 = mp_or<mp_true, void>; // mp_true, void is not reached</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R3 = mp_or<mp_false, mp_false>; // mp_false</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R4 = mp_or<void, mp_true>; // compile-time error</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2611,12 +2728,27 @@ using R4 = mp_or<void, mp_true>; // compile-time error</pre>
|
||||
<p><code>mp_any<T…​></code> is <code>mp_true</code> if <code>mp_to_bool<U></code> is <code>mp_true</code> for any type <code>U</code> in <code>T…​</code>, <code>mp_false</code> otherwise. Same as
|
||||
<code>mp_or</code>, but does not perform short-circuit evaluation.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Examples:</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R1 = mp_any<mp_true, mp_false>; // mp_true
|
||||
using R2 = mp_any<mp_true, void>; // compile-time error
|
||||
using R3 = mp_any<mp_false, mp_false>; // mp_false
|
||||
using R4 = mp_any<void, mp_true>; // compile-time error</pre>
|
||||
<pre>using R1 = mp_any<mp_true, mp_false>; // mp_true</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R2 = mp_any<mp_true, void>; // compile-time error</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R3 = mp_any<mp_false, mp_false>; // mp_false</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre>using R4 = mp_any<void, mp_true>; // compile-time error</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user