1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>first_scalar</title> 5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../index.html" title="Chapter 1. Boost.Core"> 8<link rel="up" href="../index.html" title="Chapter 1. Boost.Core"> 9<link rel="prev" href="explicit_operator_bool.html" title="explicit_operator_bool"> 10<link rel="next" href="ignore_unused.html" title="ignore_unused"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="explicit_operator_bool.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ignore_unused.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="core.first_scalar"></a><a class="link" href="first_scalar.html" title="first_scalar">first_scalar</a> 28</h2></div></div></div> 29<div class="toc"><dl class="toc"> 30<dt><span class="section"><a href="first_scalar.html#core.first_scalar.overview">Overview</a></span></dt> 31<dt><span class="section"><a href="first_scalar.html#core.first_scalar.examples">Examples</a></span></dt> 32<dt><span class="section"><a href="first_scalar.html#core.first_scalar.reference">Reference</a></span></dt> 33<dt><span class="section"><a href="first_scalar.html#core.first_scalar.history">History</a></span></dt> 34</dl></div> 35<div class="simplesect"> 36<div class="titlepage"><div><div><h3 class="title"> 37<a name="idm45312828430768"></a>Authors</h3></div></div></div> 38<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 39 Glen Fernandes 40 </li></ul></div> 41</div> 42<div class="section"> 43<div class="titlepage"><div><div><h3 class="title"> 44<a name="core.first_scalar.overview"></a><a class="link" href="first_scalar.html#core.first_scalar.overview" title="Overview">Overview</a> 45</h3></div></div></div> 46<p> 47 The header <boost/core/first_scalar.hpp> provides the function templates 48 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">first_scalar</span></code> that can be used to obtain 49 a pointer to the first scalar element of an array. Given a pointer of type 50 <code class="computeroutput"><span class="identifier">T</span><span class="special">*</span></code> 51 they return a pointer of type <code class="computeroutput"><span class="identifier">remove_all_extents_t</span><span class="special"><</span><span class="identifier">T</span><span class="special">>*</span></code>. 52 The functions are <code class="computeroutput"><span class="keyword">constexpr</span></code> 53 and can be used in constant expressions. 54 </p> 55</div> 56<div class="section"> 57<div class="titlepage"><div><div><h3 class="title"> 58<a name="core.first_scalar.examples"></a><a class="link" href="first_scalar.html#core.first_scalar.examples" title="Examples">Examples</a> 59</h3></div></div></div> 60<p> 61 The following function uses an allocator to allocate an array of arrays and 62 constructs each scalar element in it. 63 </p> 64<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">alloc_construct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 65<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">first_scalar</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 66 67<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> 68<span class="keyword">auto</span> <span class="identifier">create</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">A</span><span class="special">&</span> <span class="identifier">allocator</span><span class="special">)</span> 69<span class="special">{</span> 70 <span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special"><</span><span class="identifier">A</span><span class="special">>::</span><span class="keyword">template</span> 71 <span class="identifier">rebind_alloc</span><span class="special"><</span><span class="keyword">int</span><span class="special">[</span><span class="number">2</span><span class="special">][</span><span class="number">3</span><span class="special">]></span> <span class="identifier">other</span><span class="special">(</span><span class="identifier">allocator</span><span class="special">);</span> 72 <span class="keyword">auto</span> <span class="identifier">ptr</span> <span class="special">=</span> <span class="identifier">other</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> 73 <span class="keyword">try</span> <span class="special">{</span> 74 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alloc_construct_n</span><span class="special">(</span><span class="identifier">other</span><span class="special">,</span> 75 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">first_scalar</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">to_address</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">)),</span> <span class="number">24</span><span class="special">);</span> 76 <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(...)</span> <span class="special">{</span> 77 <span class="identifier">other</span><span class="special">.</span><span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span> 78 <span class="keyword">throw</span><span class="special">;</span> 79 <span class="special">}</span> 80 <span class="keyword">return</span> <span class="identifier">ptr</span><span class="special">;</span> 81<span class="special">}</span> 82</pre> 83</div> 84<div class="section"> 85<div class="titlepage"><div><div><h3 class="title"> 86<a name="core.first_scalar.reference"></a><a class="link" href="first_scalar.html#core.first_scalar.reference" title="Reference">Reference</a> 87</h3></div></div></div> 88<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 89 90<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> 91<span class="keyword">constexpr</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">first_scalar</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 92 93<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">N</span><span class="special">></span> 94<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">first_scalar</span><span class="special">(</span><span class="identifier">T</span> <span class="special">(*</span><span class="identifier">p</span><span class="special">)[</span><span class="identifier">N</span><span class="special">])</span> <span class="keyword">noexcept</span><span class="special">;</span> 95 96<span class="special">}</span> <span class="comment">/* boost */</span> 97</pre> 98<div class="section"> 99<div class="titlepage"><div><div><h4 class="title"> 100<a name="core.first_scalar.reference.functions"></a><a class="link" href="first_scalar.html#core.first_scalar.reference.functions" title="Functions">Functions</a> 101</h4></div></div></div> 102<div class="variablelist"> 103<p class="title"><b></b></p> 104<dl class="variablelist"> 105<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">constexpr</span> 106 <span class="identifier">T</span><span class="special">*</span> 107 <span class="identifier">first_scalar</span><span class="special">(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 108<dd><div class="variablelist"> 109<p class="title"><b></b></p> 110<dl class="variablelist"> 111<dt><span class="term">Returns</span></dt> 112<dd><p> 113 <code class="computeroutput"><span class="identifier">p</span></code>. 114 </p></dd> 115</dl> 116</div></dd> 117<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 118 <span class="identifier">N</span><span class="special">></span> 119 <span class="keyword">constexpr</span> <span class="keyword">auto</span> 120 <span class="identifier">first_scalar</span><span class="special">(</span><span class="identifier">T</span> <span class="special">(*</span><span class="identifier">p</span><span class="special">)[</span><span class="identifier">N</span><span class="special">])</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 121<dd><div class="variablelist"> 122<p class="title"><b></b></p> 123<dl class="variablelist"> 124<dt><span class="term">Returns</span></dt> 125<dd><p> 126 <code class="computeroutput"><span class="identifier">first_scalar</span><span class="special">(&(*</span><span class="identifier">p</span><span class="special">)[</span><span class="number">0</span><span class="special">])</span></code>. 127 </p></dd> 128</dl> 129</div></dd> 130</dl> 131</div> 132</div> 133</div> 134<div class="section"> 135<div class="titlepage"><div><div><h3 class="title"> 136<a name="core.first_scalar.history"></a><a class="link" href="first_scalar.html#core.first_scalar.history" title="History">History</a> 137</h3></div></div></div> 138<p> 139 Glen Fernandes implemented <code class="computeroutput"><span class="identifier">first_scalar</span></code>. 140 Peter Dimov suggested a change for GCC to support an additional <code class="computeroutput"><span class="keyword">constexpr</span></code> use. 141 </p> 142</div> 143</div> 144<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 145<td align="left"></td> 146<td align="right"><div class="copyright-footer">Copyright © 2014 Peter Dimov<br>Copyright © 2014 Glen Fernandes<br>Copyright © 2014 Andrey Semashev<p> 147 Distributed under the <a href="http://boost.org/LICENSE_1_0.txt" target="_top">Boost 148 Software License, Version 1.0</a>. 149 </p> 150</div></td> 151</tr></table> 152<hr> 153<div class="spirit-nav"> 154<a accesskey="p" href="explicit_operator_bool.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ignore_unused.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 155</div> 156</body> 157</html> 158