"Fossies" - the Fresh Open Source Software Archive

Member "dmd2/html/d/changelog/2.081.0.html" (20 Nov 2020, 71329 Bytes) of package /linux/misc/dmd.2.094.2.linux.tar.xz:


The requested HTML page contains a <FORM> tag that is unusable on "Fossies" in "automatic" (rendered) mode so that page is shown as HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 <!DOCTYPE html>
    3 <html lang="en-US">
    4 <!--
    5     Copyright (c) 1999-2020 by the D Language Foundation
    6     All Rights Reserved.
    7     https://dlang.org/foundation_overview.html
    8   -->
    9 <head>
   10 <meta charset="utf-8">
   11 <meta name="keywords" content="D programming language">
   12 <meta name="description" content="D Programming Language">
   13 <title>Change Log: 2.081.0 - D Programming Language</title>
   14 
   15 <link rel="stylesheet" href="../css/codemirror.css">
   16 <link rel="stylesheet" href="../css/style.css">
   17 <link rel="stylesheet" href="../css/print.css" media="print">
   18 <link rel="shortcut icon" href="../favicon.ico">
   19 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.1, maximum-scale=10.0">
   20 
   21 </head>
   22 <body id='Change Log: 2.081.0' class='changelog'>
   23 <script type="text/javascript">document.body.className += ' have-javascript'</script>
   24 <div id="top"><div class="helper"><div class="helper expand-container">    <div class="logo"><a href=".."><img id="logo" alt="D Logo" src="../images/dlogo.svg"></a></div>
   25     <a href="../menu.html" title="Menu" class="hamburger expand-toggle"><span>Menu</span></a>
   26     
   27 <div id="cssmenu"><ul>    <li><a href='https://tour.dlang.org'><span>Learn</span></a></li>
   28     <li class='expand-container'><a class='expand-toggle' href='../documentation.html'><span>Documentation</span></a>
   29       
   30 <ul class='expand-content'>    <li><a href='../spec/spec.html'>Language Reference</a></li>
   31     <li><a href='../phobos/index.html'>Library Reference</a></li>
   32     <li><a href='../dmd.html'>Command-line Reference</a></li>
   33     <li class="menu-divider"><a href='../comparison.html'>Feature Overview</a></li>
   34     <li><a href='../articles.html'>Articles</a></li>
   35  </ul></li>
   36     <li><a href='../download.html'><span>Downloads</span></a></li>
   37     <li><a href='https://code.dlang.org'><span>Packages</span></a></li>
   38     <li class='expand-container'><a class='expand-toggle' href='../community.html'><span>Community</span></a>
   39       
   40 <ul class='expand-content'>    <li><a href='https://dlang.org/blog'>Blog</a></li>
   41     <li><a href='../orgs-using-d.html'>Orgs using D</a></li>
   42     <li><a href='https://twitter.com/search?q=%23dlang'>Twitter</a></li>
   43     <li><a href='../calendar.html'>Calendar</a></li>
   44     <li class="menu-divider"><a href='https://forum.dlang.org'>Forums</a></li>
   45     <li><a href='irc://irc.freenode.net/d'>IRC</a></li>
   46     <li><a href='https://discord.gg/bMZk9Q4'>Community Discord</a></li>
   47     <li><a href='https://wiki.dlang.org'>Wiki</a></li>
   48     <li class="menu-divider"><a href='https://github.com/dlang'>GitHub</a></li>
   49     <li><a href='../bugstats.html'>Issues</a></li>
   50     <li><a href='https://wiki.dlang.org/Get_involved'>Get involved</a></li>
   51     <li class="menu-divider"><a href='../foundation/contributors.html'>Contributors</a></li>
   52     <li><a href='../foundation/index.html'>Foundation</a></li>
   53     <li><a href='..//security.html'>Security Team</a></li>
   54     <li><a href='../foundation/donate.html'>Donate</a></li>
   55     <li><a href='../foundation/sponsors.html'>Sponsors</a></li>
   56  </ul></li>
   57     <li class='expand-container'><a class='expand-toggle' href='../resources.html'><span>Resources</span></a>
   58       
   59 <ul class='expand-content'>    <li><a href='https://tour.dlang.org'>Tour</a></li>
   60     <li><a href='https://wiki.dlang.org/Books'>Books</a></li>
   61     <li><a href='https://wiki.dlang.org/Tutorials'>Tutorials</a></li>
   62     <li class="menu-divider"><a href='https://wiki.dlang.org/Development_tools'>Tools</a></li>
   63     <li><a href='https://wiki.dlang.org/Editors'>Editors</a></li>
   64     <li><a href='https://wiki.dlang.org/IDEs'>IDEs</a></li>
   65     <li><a href='https://run.dlang.io'>run.dlang.io</a></li>
   66     <li><a href='http://rainers.github.io/visuald/visuald/StartPage.html'>Visual D</a></li>
   67     <li class="menu-divider"><a href='../acknowledgements.html'>Acknowledgments</a></li>
   68     <li><a href='../dstyle.html'>D Style</a></li>
   69     <li><a href='../glossary.html'>Glossary</a></li>
   70     <li><a href='../sitemap.html'>Sitemap</a></li>
   71  </ul></li>
   72 </ul></div>
   73     <div class="search-container expand-container">        <a href="../search.html" class="expand-toggle" title="Search"><span>Search</span></a>
   74         
   75     <div id="search-box">        <form method="get" action="https://google.com/search">
   76             <input type="hidden" id="domains" name="domains" value="dlang.org">
   77             <input type="hidden" id="sourceid" name="sourceid" value="google-search">
   78             <span id="search-query"><input id="q" name="q" placeholder="Search"></span><span id="search-dropdown"><span class="helper">                <select id="sitesearch" name="sitesearch" size="1">
   79                     <option value="dlang.org">Entire Site</option>
   80                     <option  value="dlang.org/spec">Language</option>
   81                     <option  value="dlang.org/phobos">Library</option>
   82                     <option  value="forum.dlang.org">Forums</option>
   83                     <option value="dlang.org/changelog" selected>Change
   84 Log</option>
   85                 </select>
   86             </span></span><span id="search-submit"><button type="submit"><i class="fa fa-search"></i><span>go</span></button></span>
   87         </form>
   88     </div>
   89     </div>
   90 </div></div></div>
   91 
   92 <div class="container">    <div class="subnav-helper"></div> <div class="subnav">    
   93     <div class="head">        <h2>Change Log</h2>
   94         <p>        <a href="../changelog/index.html">List of all versions</a>
   95         <br>
   96         <a href="../changelog/release-schedule.html">Release schedule</a>
   97     </p>
   98     </div>
   99     <ul><li><a id="pending" href="pending.html">Nightly</a> <span class="hide-from-nav"> (preview) - upcoming changes from <span class="d_inlinecode donthyphenate notranslate">master</span></span></li>
  100 <li><a id="2.094.2" href="2.094.2.html">2.094.2</a><span class="hide-from-nav"> (Nov 20, 2020)</span></li>
  101 <li><a id="2.094.1" href="2.094.1.html">2.094.1</a><span class="hide-from-nav"> (Oct 18, 2020)</span></li>
  102 <li><a id="2.094.0" href="2.094.0.html">2.094.0</a><span class="hide-from-nav"> (Sep 22, 2020)</span></li>
  103 <li><a id="2.093.1" href="2.093.1.html">2.093.1</a><span class="hide-from-nav"> (Aug 15, 2020)</span></li>
  104 <li><a id="2.093.0" href="2.093.0.html">2.093.0</a><span class="hide-from-nav"> (Jul 07, 2020)</span></li>
  105 <li><a id="2.092.1" href="2.092.1.html">2.092.1</a><span class="hide-from-nav"> (Jun 10, 2020)</span></li>
  106 <li><a id="2.092.0" href="2.092.0.html">2.092.0</a><span class="hide-from-nav"> (May 10, 2020)</span></li>
  107 <li><a id="2.091.1" href="2.091.1.html">2.091.1</a><span class="hide-from-nav"> (Apr 17, 2020)</span></li>
  108 <li><a id="2.091.0" href="2.091.0.html">2.091.0</a><span class="hide-from-nav"> (Mar 08, 2020)</span></li>
  109 <li><a id="2.090.1" href="2.090.1.html">2.090.1</a><span class="hide-from-nav"> (Feb 06, 2020)</span></li>
  110 <li><a id="2.090.0" href="2.090.0.html">2.090.0</a><span class="hide-from-nav"> (Jan 05, 2020)</span></li>
  111 <li><a id="2.089.1" href="2.089.1.html">2.089.1</a><span class="hide-from-nav"> (Dec 14, 2019)</span></li>
  112 <li><a id="2.089.0" href="2.089.0.html">2.089.0</a><span class="hide-from-nav"> (Nov 02, 2019)</span></li>
  113 <li><a id="2.088.1" href="2.088.1.html">2.088.1</a><span class="hide-from-nav"> (Oct 11, 2019)</span></li>
  114 <li><a id="2.088.0" href="2.088.0.html">2.088.0</a><span class="hide-from-nav"> (Sep 01, 2019)</span></li>
  115 <li><a id="2.087.1" href="2.087.1.html">2.087.1</a><span class="hide-from-nav"> (Aug 04, 2019)</span></li>
  116 <li><a id="2.087.0" href="2.087.0.html">2.087.0</a><span class="hide-from-nav"> (Jul 01, 2019)</span></li>
  117 <li><a id="2.086.1" href="2.086.1.html">2.086.1</a><span class="hide-from-nav"> (Jun 15, 2019)</span></li>
  118 <li><a id="2.086.0" href="2.086.0.html">2.086.0</a><span class="hide-from-nav"> (May 04, 2019)</span></li>
  119 <li><a id="2.085.1" href="2.085.1.html">2.085.1</a><span class="hide-from-nav"> (Apr 05, 2019)</span></li>
  120 <li><a id="2.085.0" href="2.085.0.html">2.085.0</a><span class="hide-from-nav"> (Mar 01, 2019)</span></li>
  121 <li><a id="2.084.1" href="2.084.1.html">2.084.1</a><span class="hide-from-nav"> (Feb 09, 2019)</span></li>
  122 <li><a id="2.084.0" href="2.084.0.html">2.084.0</a><span class="hide-from-nav"> (Jan 01, 2019)</span></li>
  123 <li><a id="2.083.1" href="2.083.1.html">2.083.1</a><span class="hide-from-nav"> (Dec 08, 2018)</span></li>
  124 <li><a id="2.083.0" href="2.083.0.html">2.083.0</a><span class="hide-from-nav"> (Nov 01, 2018)</span></li>
  125 <li><a id="2.082.1" href="2.082.1.html">2.082.1</a><span class="hide-from-nav"> (Oct 10, 2018)</span></li>
  126 <li><a id="2.082.0" href="2.082.0.html">2.082.0</a><span class="hide-from-nav"> (Sep 01, 2018)</span></li>
  127 <li><a id="2.081.2" href="2.081.2.html">2.081.2</a><span class="hide-from-nav"> (Aug 12, 2018)</span></li>
  128 <li><a id="2.081.1" href="2.081.1.html">2.081.1</a><span class="hide-from-nav"> (Jul 10, 2018)</span></li>
  129 <li><a id="2.081.0" href="2.081.0.html">2.081.0</a><span class="hide-from-nav"> (Jul 01, 2018)</span></li>
  130 <li><a id="2.080.1" href="2.080.1.html">2.080.1</a><span class="hide-from-nav"> (Jun 07, 2018)</span></li>
  131 <li><a id="2.080.0" href="2.080.0.html">2.080.0</a><span class="hide-from-nav"> (May 01, 2018)</span></li>
  132 <li><a id="2.079.1" href="2.079.1.html">2.079.1</a><span class="hide-from-nav"> (Apr 14, 2018)</span></li>
  133 <li><a id="2.079.0" href="2.079.0.html">2.079.0</a><span class="hide-from-nav"> (Mar 01, 2018)</span></li>
  134 <li><a id="2.078.3" href="2.078.3.html">2.078.3</a><span class="hide-from-nav"> (Feb 15, 2018)</span></li>
  135 <li><a id="2.078.2" href="2.078.2.html">2.078.2</a><span class="hide-from-nav"> (Feb 07, 2018)</span></li>
  136 <li><a id="2.078.1" href="2.078.1.html">2.078.1</a><span class="hide-from-nav"> (Jan 21, 2018)</span></li>
  137 <li><a id="2.078.0" href="2.078.0.html">2.078.0</a><span class="hide-from-nav"> (Jan 01, 2018)</span></li>
  138 <li><a id="2.077.1" href="2.077.1.html">2.077.1</a><span class="hide-from-nav"> (Nov 29, 2017)</span></li>
  139 <li><a id="2.077.0" href="2.077.0.html">2.077.0</a><span class="hide-from-nav"> (Nov 1, 2017)</span></li>
  140 <li><a id="2.076.1" href="2.076.1.html">2.076.1</a><span class="hide-from-nav"> (Oct 09, 2017)</span></li>
  141 <li><a id="2.076.0" href="2.076.0.html">2.076.0</a><span class="hide-from-nav"> (Sep 1, 2017)</span></li>
  142 <li><a id="2.075.1" href="2.075.1.html">2.075.1</a><span class="hide-from-nav"> (Aug 11, 2017)</span></li>
  143 <li><a id="2.075.0" href="2.075.0.html">2.075.0</a><span class="hide-from-nav"> (Jul 19, 2017)</span></li>
  144 <li><a id="2.074.1" href="2.074.1.html">2.074.1</a><span class="hide-from-nav"> (May 30, 2017)</span></li>
  145 <li><a id="2.074.0" href="2.074.0.html">2.074.0</a><span class="hide-from-nav"> (Apr 10, 2017)</span></li>
  146 <li><a id="2.073.2" href="2.073.2.html">2.073.2</a><span class="hide-from-nav"> (Mar 09, 2017)</span></li>
  147 <li><a id="2.073.1" href="2.073.1.html">2.073.1</a><span class="hide-from-nav"> (Feb 16, 2017)</span></li>
  148 <li><a id="2.073.0" href="2.073.0.html">2.073.0</a><span class="hide-from-nav"> (Jan 22, 2017)</span></li>
  149 <li><a id="2.072.2" href="2.072.2.html">2.072.2</a><span class="hide-from-nav"> (Dec 31, 2016)</span></li>
  150 <li><a id="2.072.1" href="2.072.1.html">2.072.1</a><span class="hide-from-nav"> (Nov 30, 2016)</span></li>
  151 <li><a id="2.072.0" href="2.072.0.html">2.072.0</a><span class="hide-from-nav"> (Oct 30, 2016)</span></li>
  152 <li><a id="2.071.2" href="2.071.2.html">2.071.2</a><span class="hide-from-nav"> (September 19, 2016)</span></li>
  153 <li><a id="2.071.1" href="2.071.1.html">2.071.1</a><span class="hide-from-nav"> (June 27, 2016)</span></li>
  154 <li><a id="2.071.0" href="2.071.0.html">2.071.0</a><span class="hide-from-nav"> (Apr 5, 2016)</span></li>
  155 <li><a id="2.070.2" href="2.070.2.html">2.070.2</a><span class="hide-from-nav"> (Mar 3, 2016)</span></li>
  156 <li><a id="2.070.1" href="2.070.1.html">2.070.1</a><span class="hide-from-nav"> (Feb 27, 2016)</span></li>
  157 <li><a id="2.070.0" href="2.070.0.html">2.070.0</a><span class="hide-from-nav"> (Jan 27, 2016)</span></li>
  158 <li><a id="2.069.2" href="2.069.2.html">2.069.2</a><span class="hide-from-nav"> (Dec 3, 2015)</span></li>
  159 <li><a id="2.069.1" href="2.069.1.html">2.069.1</a><span class="hide-from-nav"> (Nov 11, 2015)</span></li>
  160 <li><a id="2.069.0" href="2.069.0.html">2.069.0</a><span class="hide-from-nav"> (Nov 3, 2015)</span></li>
  161 <li><a id="2.068.2" href="2.068.2.html">2.068.2</a><span class="hide-from-nav"> (Sep 23, 2015)</span></li>
  162 <li><a id="2.068.1" href="2.068.1.html">2.068.1</a><span class="hide-from-nav"> (Sep 06, 2015)</span></li>
  163 <li><a id="2.068.0" href="2.068.0.html">2.068.0</a><span class="hide-from-nav"> (Aug 09, 2015)</span></li>
  164 <li><a id="2.067.1" href="2.067.1.html">2.067.1</a><span class="hide-from-nav"> (Apr 25, 2015)</span></li>
  165 <li><a id="2.067.0" href="2.067.0.html">2.067.0</a><span class="hide-from-nav"> (Mar 24, 2015)</span></li>
  166 <li><a id="2.066.1" href="2.066.1.html">2.066.1</a><span class="hide-from-nav"> (October 15, 2014)</span></li>
  167 <li><a id="2.066.0" href="2.066.0.html">2.066.0</a><span class="hide-from-nav"> (August 18, 2014)</span></li>
  168 <li><a id="2.065.0" href="2.065.0.html">2.065.0</a><span class="hide-from-nav"> (February 24, 2014)</span></li>
  169 <li><a id="2.064" href="2.064.html">2.064</a><span class="hide-from-nav"> (November 5, 2013)</span></li>
  170 <li><a id="2.063" href="2.063.html">2.063</a><span class="hide-from-nav"> (May 28, 2013)</span></li>
  171 <li><a id="2.062" href="2.062.html">2.062</a><span class="hide-from-nav"> (Feb 18, 2013)</span></li>
  172 <li><a id="2.061" href="2.061.html">2.061</a><span class="hide-from-nav"> (Jan 1, 2013)</span></li>
  173 <li><a id="2.060" href="2.060.html">2.060</a><span class="hide-from-nav"> (Aug 2, 2012)</span></li>
  174 <li><a id="2.059" href="2.059.html">2.059</a><span class="hide-from-nav"> (Apr 12, 2012)</span></li>
  175 <li><a id="2.058" href="2.058.html">2.058</a><span class="hide-from-nav"> (Feb 14, 2012)</span></li>
  176 <li><a id="2.057" href="2.057.html">2.057</a><span class="hide-from-nav"> (Dec 13, 2011)</span></li>
  177 <li><a id="2.056" href="2.056.html">2.056</a><span class="hide-from-nav"> (Oct 26, 2011)</span></li>
  178 <li><a id="2.055" href="2.055.html">2.055</a><span class="hide-from-nav"> (Sep 4, 2011)</span></li>
  179 <li><a id="2.054" href="2.054.html">2.054</a><span class="hide-from-nav"> (Jul 10, 2011)</span></li>
  180 <li><a id="2.053" href="2.053.html">2.053</a><span class="hide-from-nav"> (May 12, 2011)</span></li>
  181 <li><a id="2.052" href="2.052.html">2.052</a><span class="hide-from-nav"> (Feb 17, 2011)</span></li>
  182 <li><a id="2.051" href="2.051.html">2.051</a><span class="hide-from-nav"> (Dec 21, 2010)</span></li>
  183 <li><a id="2.050" href="2.050.html">2.050</a><span class="hide-from-nav"> (Oct 29, 2010)</span></li>
  184 <li><a id="2.049" href="2.049.html">2.049</a><span class="hide-from-nav"> (Sep 13, 2010)</span></li>
  185 <li><a id="2.048" href="2.048.html">2.048</a><span class="hide-from-nav"> (Aug 8, 2010)</span></li>
  186 <li><a id="2.047" href="2.047.html">2.047</a><span class="hide-from-nav"> (Jun 11, 2010)</span></li>
  187 <li><a id="2.046" href="2.046.html">2.046</a><span class="hide-from-nav"> (May 10, 2010)</span></li>
  188 <li><a id="2.045" href="2.045.html">2.045</a><span class="hide-from-nav"> (May 4, 2010)</span></li>
  189 <li><a id="2.044" href="2.044.html">2.044</a><span class="hide-from-nav"> (Apr 30, 2010)</span></li>
  190 <li><a id="2.043" href="2.043.html">2.043</a><span class="hide-from-nav"> (Apr 6, 2010)</span></li>
  191 <li><a id="2.042" href="2.042.html">2.042</a><span class="hide-from-nav"> (Mar 19, 2010)</span></li>
  192 <li><a id="2.041" href="2.041.html">2.041</a><span class="hide-from-nav"> (Mar 7, 2010)</span></li>
  193 <li><a id="2.040" href="2.040.html">2.040</a><span class="hide-from-nav"> (Jan 29, 2010)</span></li>
  194 <li><a id="2.039" href="2.039.html">2.039</a><span class="hide-from-nav"> (Jan 1, 2010)</span></li>
  195 <li><a id="2.038" href="2.038.html">2.038</a><span class="hide-from-nav"> (Dec 30, 2009)</span></li>
  196 <li><a id="2.037" href="2.037.html">2.037</a><span class="hide-from-nav"> (Dec 3, 2009)</span></li>
  197 <li><a id="2.036" href="2.036.html">2.036</a><span class="hide-from-nav"> (Nov 5, 2009)</span></li>
  198 <li><a id="2.035" href="2.035.html">2.035</a><span class="hide-from-nav"> (Oct 14, 2009)</span></li>
  199 <li><a id="2.034" href="2.034.html">2.034</a><span class="hide-from-nav"> (Oct 11, 2009)</span></li>
  200 <li><a id="2.033" href="2.033.html">2.033</a><span class="hide-from-nav"> (Oct 5, 2009)</span></li>
  201 <li><a id="2.032" href="2.032.html">2.032</a><span class="hide-from-nav"> (Sep 2, 2009)</span></li>
  202 <li><a id="2.031" href="2.031.html">2.031</a><span class="hide-from-nav"> (July 6, 2009)</span></li>
  203 <li><a id="2.030" href="2.030.html">2.030</a><span class="hide-from-nav"> (May 11, 2009)</span></li>
  204 <li><a id="2.029" href="2.029.html">2.029</a><span class="hide-from-nav"> (Apr 19, 2009)</span></li>
  205 <li><a id="2.028" href="2.028.html">2.028</a><span class="hide-from-nav"> (Apr 7, 2009)</span></li>
  206 <li><a id="2.027" href="2.027.html">2.027</a><span class="hide-from-nav"> (Mar 31, 2009)</span></li>
  207 <li><a id="2.026" href="2.026.html">2.026</a><span class="hide-from-nav"> (Mar 3, 2009)</span></li>
  208 <li><a id="2.025" href="2.025.html">2.025</a><span class="hide-from-nav"> (Feb 14, 2009)</span></li>
  209 <li><a id="2.023" href="2.023.html">2.023</a><span class="hide-from-nav"> (Jan 2, 2009)</span></li>
  210 <li><a id="2.022" href="2.022.html">2.022</a><span class="hide-from-nav"> (Dec 11, 2008)</span></li>
  211 <li><a id="2.021" href="2.021.html">2.021</a><span class="hide-from-nav"> (Nov 25, 2008)</span></li>
  212 <li><a id="2.020" href="2.020.html">2.020</a><span class="hide-from-nav"> (Oct 20, 2008)</span></li>
  213 <li><a id="2.019" href="2.019.html">2.019</a><span class="hide-from-nav"> (Sep 2, 2008)</span></li>
  214 <li><a id="2.018" href="2.018.html">2.018</a><span class="hide-from-nav"> (Aug 7, 2008)</span></li>
  215 <li><a id="2.017" href="2.017.html">2.017</a><span class="hide-from-nav"> (Jul 11, 2008)</span></li>
  216 <li><a id="2.016" href="2.016.html">2.016</a><span class="hide-from-nav"> (Jul 8, 2008)</span></li>
  217 <li><a id="2.015" href="2.015.html">2.015</a><span class="hide-from-nav"> (Jun 17, 2008)</span></li>
  218 <li><a id="2.014" href="2.014.html">2.014</a><span class="hide-from-nav"> (May 16, 2008)</span></li>
  219 <li><a id="2.013" href="2.013.html">2.013</a><span class="hide-from-nav"> (Apr 22, 2008)</span></li>
  220 <li><a id="2.012" href="2.012.html">2.012</a><span class="hide-from-nav"> (Mar 6, 2008)</span></li>
  221 <li><a id="2.011" href="2.011.html">2.011</a><span class="hide-from-nav"> (Feb 18, 2008)</span></li>
  222 <li><a id="2.010" href="2.010.html">2.010</a><span class="hide-from-nav"> (Jan 20, 2008)</span></li>
  223 <li><a id="2.009" href="2.009.html">2.009</a><span class="hide-from-nav"> (Jan 1, 2008)</span></li>
  224 <li><a id="2.008" href="2.008.html">2.008</a><span class="hide-from-nav"> (Nov 27, 2007)</span></li>
  225 <li><a id="2.007" href="2.007.html">2.007</a><span class="hide-from-nav"> (Oct 31, 2007)</span></li>
  226 <li><a id="2.006" href="2.006.html">2.006</a><span class="hide-from-nav"> (Oct 16, 2007)</span></li>
  227 <li><a id="2.005" href="2.005.html">2.005</a><span class="hide-from-nav"> (Oct 1, 2007)</span></li>
  228 <li><a id="2.004" href="2.004.html">2.004</a><span class="hide-from-nav"> (Sep 5, 2007)</span></li>
  229 <li><a id="2.003" href="2.003.html">2.003</a><span class="hide-from-nav"> (Jul 21, 2007)</span></li>
  230 <li><a id="2.002" href="2.002.html">2.002</a><span class="hide-from-nav"> (Jul 1, 2007)</span></li>
  231 <li><a id="2.001" href="2.001.html">2.001</a><span class="hide-from-nav"> (Jun 27, 2007)</span></li>
  232 <li><a id="2.000" href="2.000.html">2.000</a><span class="hide-from-nav"> (Jun 17, 2007)</span></li></ul>
  233 </div>
  234     <div class="hyphenate" id="content">        
  235 <div id="tools"><div >  <div class="tip smallprint">        <a href="https://issues.dlang.org/enter_bug.cgi?bug_file_loc=http%3A%2F%2Fdlang.org/&amp;component=dlang.org&amp;op_sys=All&amp;priority=P3&amp;product=D&amp;rep_platform=All&amp;short_desc=%5BChange Log: 2.081.0%5D&amp;version=D2&amp;bug_severity=enhancement">Report a bug</a>
  236         <div >          If you spot a problem with this page, click here to create a Bugzilla issue.
  237         </div>
  238     </div>
  239     <div class="tip smallprint">        <a href="https://github.com/dlang/dlang.org/edit/master/changelog/2.081.0.dd">Improve this page</a>
  240         <div >          Quickly fork, edit online, and submit a pull request for this page.
  241             Requires a signed-in GitHub account. This works well for small changes.
  242             If you'd like to make larger changes you may want to consider using
  243             a local clone.
  244         </div>
  245     </div>
  246 </div></div>
  247         <h1>Change Log: 2.081.0</h1>
  248         
  249         
  250 
  251 
  252 <div class="changelog-nav">previous version: <a href="2.080.1.html">2.080.1</a>
  253 &ndash; next version: <a href="2.081.1.html">2.081.1</a></div>
  254 
  255 
  256 <div class="version"><p><b><font size="4"><a href="http://downloads.dlang.org/releases/2.x/2.081.0">Download D 2.081.0</a></font></b><br>
  257 <small>released Jul 01, 2018</small>
  258 </p>
  259 
  260 <div class="bugsfixed"><h4>Compiler changes</h4> <ol>
  261 <li><a href="#deprecate_ctor_in_static_block">Deprecate allowing a constructor declaration in a static block</a></li>
  262 <li><a href="#deprecate_this_super_as_types">Deprecate usage of <span class="d_inlinecode donthyphenate notranslate">this</span> and <span class="d_inlinecode donthyphenate notranslate">super</span> as types</a></li>
  263 <li><a href="#expression-based_contract_syntax">Implement DIP 1009 - Add Expression-Based Contract Syntax</a></li>
  264 <li><a href="#extern_cpp_overhaul"><span class="d_inlinecode donthyphenate notranslate">extern (C++)</span> construction, destruction, operators and other mangling improvements</a></li>
  265 <li><a href="#fix16206">Support for iterating template overloads</a></li>
  266 <li><a href="#getlinkage_for_classes">__traits(getLinkage, ...) now works on structs, classes, and interfaces.</a></li>
  267 <li><a href="#implicit_catch_error">Implicit <span class="d_inlinecode donthyphenate notranslate">catch</span> statements will now result in an error</a></li>
  268 <li><a href="#implicit_enum_comparison_error">Implicit comparison of different enums will now result in an error</a></li>
  269 <li><a href="#implicit_string_concatenation_error">Implicit string concatenation will now result in an error</a></li>
  270 <li><a href="#iretq"><span class="d_inlinecode donthyphenate notranslate">IRETQ</span> is now supported in inline assembler.</a></li>
  271 <li><a href="#min_runtime_classes">Interfaces and classes can be used without the runtime if only static fields are utilized</a></li>
  272 <li><a href="#redundant_stc_error">Specifying redundant storage classes will now result in a compiler error</a></li>
  273 
  274  </ol></div>
  275 
  276 <div class="bugsfixed"><h4>Runtime changes</h4> <ol>
  277 <li><a href="#backtrace_debug_info_macos">Filenames and line numbers have been added to stacktraces on macOS</a></li>
  278 <li><a href="#cpp_destroy"><span class="d_inlinecode donthyphenate notranslate">object.destroy()</span> supports <span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> classes.</a></li>
  279 <li><a href="#getsect">Add missing declarations to <span class="d_inlinecode donthyphenate notranslate">core.sys.darwin.mach.getsect</span></a></li>
  280 
  281  </ol></div>
  282 
  283 <div class="bugsfixed"><h4>Library changes</h4> <ol>
  284 <li><a href="#remove_std_c">The deprecated <span class="d_inlinecode donthyphenate notranslate">std.c</span> package has been removed.</a></li>
  285 <li><a href="#std-algorithm-iteration-joiner">The performance of <span class="d_inlinecode donthyphenate notranslate">std.algorithm.iteration.joiner</span> has been improved</a></li>
  286 <li><a href="#std-algorithm-mutation-remove"><span class="d_inlinecode donthyphenate notranslate">std.algorithm.mutation.remove</span> now only accepts integral values or pair of integral values as offset</a></li>
  287 <li><a href="#std-math-fminmax">Changed semantics of std.math.{fmin,fmax} wrt. NaNs.</a></li>
  288 
  289  </ol></div>
  290 
  291 <div class="bugsfixed"><h4>Dub changes</h4> <ol>
  292 <li><a href="#customCachePaths">DUB supports "customCachePaths" for providing read-only package paths</a></li>
  293 
  294  </ol></div>
  295 
  296 <br><em class="big"><a href="#bugfix-list">List of all bug fixes and enhancements in D 2.081.0.</a></em>
  297 
  298 <hr>
  299 
  300 <div class="bugsfixed"><h4>Compiler changes</h4> <ol>
  301 <li><a class="anchor" title="Permalink to this section" id="deprecate_ctor_in_static_block" href="#deprecate_ctor_in_static_block">Deprecate allowing a constructor declaration in a static block</a>
  302 
  303 <p>Before patch:
  304 The language specification states that a static constructor is
  305 defined using the construction "static this()". Defining a
  306 constructor inside a static block does not have any effect
  307 on the constructor. The following code samples do not affect
  308 the constructor in any way:
  309 </p>
  310 
  311 <pre class="d_code notranslate"><span class="d_keyword">static</span>:
  312     <span class="d_keyword">this</span>() {}
  313 </pre>
  314 
  315 <pre class="d_code notranslate"><span class="d_keyword">static</span>
  316 {
  317     <span class="d_keyword">this</span>() {}
  318 }
  319 </pre>
  320 
  321 <p>The compiler does not issue any warning/error on the above code
  322 samples and generates a normal constructor which is not ran before
  323 the main() function. This leads to situations in which the
  324 compiler is not able to correctly indicate the problem:
  325 </p>
  326 
  327 <pre class="d_code notranslate"><span class="d_keyword">class</span> A
  328 {
  329     <span class="d_keyword">static</span>
  330     {
  331         <span class="d_keyword">this</span>() {}
  332     }
  333 
  334     <span class="d_keyword">this</span>() {}
  335 }
  336 
  337 <span class="d_keyword">void</span> main()
  338 {
  339     <span class="d_keyword">new</span> A();
  340 }
  341 </pre>
  342 
  343 <p>This code will result in an error message indicating that
  344 there is a multiple definition of the constructor this()
  345 which is a misleading message.
  346 </p>
  347 
  348 <p>After patch:
  349 Whenever a constructor is encountered in a static context a
  350 deprecation message is issued stating that the <span class="d_inlinecode donthyphenate notranslate">static</span>
  351 keyword does not have any effect on the constructor.
  352 The solution is to declare the constructor outside the
  353 static block either as a normal constructor or a static
  354 one (<span class="d_inlinecode donthyphenate notranslate">static this()</span>).
  355 </p>
  356 </li>
  357 
  358 <li><a class="anchor" title="Permalink to this section" id="deprecate_this_super_as_types" href="#deprecate_this_super_as_types">Deprecate usage of <span class="d_inlinecode donthyphenate notranslate">this</span> and <span class="d_inlinecode donthyphenate notranslate">super</span> as types</a>
  359 
  360 <p>Prior to this release, <span class="d_inlinecode donthyphenate notranslate">this</span> and <span class="d_inlinecode donthyphenate notranslate">super</span> could be used as both data or types
  361 depending on the context.  Starting with this release using <span class="d_inlinecode donthyphenate notranslate">this</span> or <span class="d_inlinecode donthyphenate notranslate">super</span>
  362 as a type will result in a compiler error.
  363 </p>
  364 
  365 <pre class="d_code notranslate"><span class="d_keyword">class</span> C
  366 {
  367     <span class="d_keyword">shared</span>(<span class="d_keyword">this</span>) x;    <span class="d_comment">// Deprecation: Using `this` as a type is deprecated. Use `typeof(this)` instead
  368 </span>}
  369 
  370 <span class="d_keyword">class</span> D : C
  371 {
  372     <span class="d_keyword">shared</span>(<span class="d_keyword">super</span>) a;   <span class="d_comment">// Deprecation: Using `super` as a type is deprecated. Use `typeof(super)` instead
  373 </span>    <span class="d_keyword">super</span> b;           <span class="d_comment">// Deprecation: Using `super` as a type is deprecated. Use `typeof(super)` instead
  374 </span>}
  375 </pre>
  376 
  377 <p>Use <span class="d_inlinecode donthyphenate notranslate">typeof(super)</span> or <span class="d_inlinecode donthyphenate notranslate">typeof(this)</span> instead.
  378 </p>
  379 
  380 <pre class="d_code notranslate"><span class="d_keyword">class</span> C
  381 {
  382     <span class="d_keyword">shared</span>(<span class="d_keyword">typeof</span>(<span class="d_keyword">this</span>)) x;
  383 }
  384 
  385 <span class="d_keyword">class</span> D : C
  386 {
  387     <span class="d_keyword">shared</span>(<span class="d_keyword">typeof</span>(<span class="d_keyword">super</span>)) a;
  388     <span class="d_keyword">typeof</span>(<span class="d_keyword">super</span>) b;
  389 }
  390 </pre>
  391 </li>
  392 
  393 <li><a class="anchor" title="Permalink to this section" id="expression-based_contract_syntax" href="#expression-based_contract_syntax">Implement DIP 1009 - Add Expression-Based Contract Syntax</a>
  394 
  395 <p>Expression-based contract syntax has been added: Contracts that consist of a single assertion can now be written more succinctly and multiple <span class="d_inlinecode donthyphenate notranslate">in</span> or <span class="d_inlinecode donthyphenate notranslate">out</span> contracts can be specified for the same function.
  396 </p>
  397 
  398 <p>Example:
  399 </p>
  400 
  401 <pre class="d_code notranslate"><span class="d_keyword">class</span> C {
  402     <span class="d_keyword">private</span> <span class="d_keyword">int</span> x;
  403     <span class="d_keyword">invariant</span>(x &gt;= 0);
  404     <span class="d_comment">// ...
  405 </span>}
  406 
  407 <span class="d_keyword">int</span> fun(<span class="d_keyword">ref</span> <span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b)
  408     <span class="d_keyword">in</span>(a &gt; 0)
  409     <span class="d_keyword">in</span>(b &gt;= 0, <span class="d_string">"b cannot be negative"</span>)
  410     <span class="d_keyword">out</span>(r; r &gt; 0, <span class="d_string">"return must be positive"</span>)
  411     <span class="d_keyword">out</span>(; a != 0)
  412 {
  413     <span class="d_comment">// ...
  414 </span>}
  415 </pre>
  416 </li>
  417 
  418 <li><a class="anchor" title="Permalink to this section" id="extern_cpp_overhaul" href="#extern_cpp_overhaul"><span class="d_inlinecode donthyphenate notranslate">extern (C++)</span> construction, destruction, operators and other mangling improvements</a>
  419 
  420 <p>Many improvements have been made to the <span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> experience in this release cycle.
  421 </p>
  422 
  423 <p>Mangling improvements include:
  424 </p>
  425 
  426 <p><ul>  <li> Constructor/destructor mangling matches C++</li>
  427   <li> Compatible D style operators now mangle as C++ operators</li>
  428   <li> <span class="d_inlinecode donthyphenate notranslate">nullptr_t</span> mangles correctly</li>
  429   <li> Various mangling bugs have been fixed</li>
  430 </ul>
  431 </p>
  432 
  433 <p><span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> APIs that use <span class="d_inlinecode donthyphenate notranslate">nullptr_t</span> can use <span class="d_inlinecode donthyphenate notranslate">typeof(null)</span> on the D side:
  434 </p>
  435 <pre class="d_code notranslate"><span class="d_keyword">alias</span> nullptr_t = <span class="d_keyword">typeof</span>(<span class="d_keyword">null</span>);
  436 <span class="d_keyword">extern</span> (C++) <span class="d_keyword">void</span> fun(nullptr_t);
  437 </pre>
  438 
  439 <p><span class="d_inlinecode donthyphenate notranslate">extern (C++)</span> mangling of operators is working for all operators that are semantically equivalent.
  440 This list includes all instantiations of <span class="d_inlinecode donthyphenate notranslate">opUnary</span>, <span class="d_inlinecode donthyphenate notranslate">opBinary</span>, <span class="d_inlinecode donthyphenate notranslate">opAssign</span>, <span class="d_inlinecode donthyphenate notranslate">opOpAssign</span>, <span class="d_inlinecode donthyphenate notranslate">opCast</span>, <span class="d_inlinecode donthyphenate notranslate">opEquals</span>, <span class="d_inlinecode donthyphenate notranslate">opIndex</span>, <span class="d_inlinecode donthyphenate notranslate">opCall</span>.
  441 Two notable exceptions are <span class="d_inlinecode donthyphenate notranslate">opCmp</span>, and C++ <span class="d_inlinecode donthyphenate notranslate">operator !</span>, which don't have compatible implementations.
  442 </p>
  443 
  444 <p>Mangling of <span class="d_inlinecode donthyphenate notranslate">extern (C++) class</span> constructors and destructor are working.
  445 </p>
  446 
  447 <p>This release also includes ABI fixes where destructors are now correctly added to the virtual table, and constructor/destructor calling semantics now match C++.
  448 With this, mixed-language class hierarchies are working, with construction/destruction being supported in either language.
  449 </p>
  450 </li>
  451 
  452 <li><a class="anchor" title="Permalink to this section" id="fix16206" href="#fix16206">Support for iterating template overloads</a>
  453 
  454 <p><span class="d_inlinecode donthyphenate notranslate">__traits(getOverloads)</span> has been extended to return template overloads when passed an optional parameter with a true value.
  455 </p>
  456 
  457 <pre class="d_code notranslate"><span class="d_keyword">struct</span> S
  458 {
  459     <span class="d_keyword">static</span> <span class="d_keyword">int</span> foo()() { <span class="d_keyword">return</span> 0; }
  460     <span class="d_keyword">static</span> <span class="d_keyword">int</span> foo()(<span class="d_keyword">int</span> n) { <span class="d_keyword">return</span> 1; }
  461     <span class="d_keyword">static</span> <span class="d_keyword">int</span> foo(string s) { <span class="d_keyword">return</span> 2; }
  462     <span class="d_keyword">enum</span> foo(<span class="d_keyword">int</span>[] arr) = arr.length;
  463 }
  464 
  465 <span class="d_keyword">alias</span> AliasSeq(T...) = T;
  466 
  467 <span class="d_keyword">alias</span> allFoos = AliasSeq!(<span class="d_keyword">__traits</span>(getOverloads, S, <span class="d_string">"foo"</span>, <span class="d_keyword">true</span>));
  468 
  469 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(allFoos.length == 4);
  470 
  471 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(allFoos[0](<span class="d_string">""</span>) == 2);
  472 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(allFoos[1]() == 0);
  473 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(allFoos[2](1) == 1);
  474 <span class="d_keyword">alias</span> foo3 = allFoos[3];
  475 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(foo3!([]) == 0);
  476 </pre>
  477 </li>
  478 
  479 <li><a class="anchor" title="Permalink to this section" id="getlinkage_for_classes" href="#getlinkage_for_classes">__traits(getLinkage, ...) now works on structs, classes, and interfaces.</a>
  480 
  481 <p>It is now possible to detect the language ABI specified for a struct, class, or interface.
  482 </p>
  483 
  484 <pre class="d_code notranslate"><span class="d_keyword">class</span> MyClass {}
  485 <span class="d_keyword">extern</span> (C++) <span class="d_keyword">struct</span> MyCPPStruct {}
  486 <span class="d_keyword">extern</span> (C++) <span class="d_keyword">interface</span> MyCPPInterface {}
  487 <span class="d_keyword">extern</span> (Objective-C) <span class="d_keyword">interface</span> MyObjcInterface {}
  488 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(getLinkage, MyClass) == <span class="d_string">"D"</span>);
  489 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(getLinkage, MyCPPStruct) == <span class="d_string">"C++"</span>);
  490 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(getLinkage, MyCPPInterface) == <span class="d_string">"C++"</span>);
  491 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(getLinkage, MyObjcInterface) == <span class="d_string">"Objective-C"</span>);
  492 </pre>
  493 </li>
  494 
  495 <li><a class="anchor" title="Permalink to this section" id="implicit_catch_error" href="#implicit_catch_error">Implicit <span class="d_inlinecode donthyphenate notranslate">catch</span> statements will now result in an error</a>
  496 
  497 <p>See the <a href="../deprecate.html#Implicit catch statement">Deprecated Features</a>
  498 for more information.
  499 </p>
  500 
  501 <p>Implicit <span class="d_inlinecode donthyphenate notranslate">catch</span> statements were deprecated in 2.072.  Starting with this release, implicit
  502 <span class="d_inlinecode donthyphenate notranslate">catch</span> statements will cause the compiler to emit an error.
  503 </p>
  504 
  505 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.stdio;
  506 
  507 <span class="d_keyword">void</span> main()
  508 {
  509     <span class="d_keyword">int</span>[] arr = <span class="d_keyword">new</span> <span class="d_keyword">int</span>[](10);
  510     <span class="d_comment">// This will throw a RangeError
  511 </span>    <span class="d_keyword">try</span> { arr[42]++; }
  512     <span class="d_keyword">catch</span>  <span class="d_comment">// Error: `catch` statement without an exception specification is deprecated;
  513 </span>           <span class="d_comment">// use `catch(Throwable)` for old behavior
  514 </span>    {
  515         writeln(<span class="d_string">"An error was caught and ignored"</span>);
  516     }
  517 }
  518 </pre>
  519 </li>
  520 
  521 <li><a class="anchor" title="Permalink to this section" id="implicit_enum_comparison_error" href="#implicit_enum_comparison_error">Implicit comparison of different enums will now result in an error</a>
  522 
  523 <p>See the <a href="../deprecate.html#Implicit comparison of different enums">Deprecated Features</a> for more information.
  524 </p>
  525 
  526 <p>Implicit comparison of different enums was deprecated in 2.075.  Starting with this release, implicit comparison of different
  527 enums will cause the compiler to emit an error.
  528 </p>
  529 
  530 <pre class="d_code notranslate"><span class="d_keyword">enum</span> Status
  531 {
  532     good,
  533     bad
  534 }
  535 <span class="d_keyword">enum</span> OtherStatus
  536 {
  537     ok,
  538     no
  539 }
  540 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(Status.good == OtherStatus.ok); <span class="d_comment">// Error: Comparison between different enumeration types `Status` and `OtherStatus`;
  541 </span>                                              <span class="d_comment">// If this behavior is intended consider using `std.conv.asOriginalType`
  542 </span></pre>
  543 </li>
  544 
  545 <li><a class="anchor" title="Permalink to this section" id="implicit_string_concatenation_error" href="#implicit_string_concatenation_error">Implicit string concatenation will now result in an error</a>
  546 
  547 <p>See the <a href="../deprecate.html#Implicit%20string%20concatenation">Deprecated Features</a> for more information.
  548 </p>
  549 
  550 <p>Implicit string concatenation was deprecated in 2.072.  Starting with this release, implicit string concatenation will cause the compiler
  551 to emit an error.
  552 </p>
  553 
  554 <pre class="d_code notranslate"><span class="d_keyword">void</span> main()
  555 {
  556     string s = <span class="d_string">"Hello"</span> <span class="d_string">", World!"</span>;  <span class="d_comment">// Error: Implicit string concatenation is deprecated, use "" ~ "" instead
  557 </span>}
  558 </pre>
  559 </li>
  560 
  561 <li><a class="anchor" title="Permalink to this section" id="iretq" href="#iretq"><span class="d_inlinecode donthyphenate notranslate">IRETQ</span> is now supported in inline assembler.</a>
  562 
  563 <p><span class="d_inlinecode donthyphenate notranslate">IRETQ</span> is the 64-bit version of the already supported <span class="d_inlinecode donthyphenate notranslate">IRET</span> instruction. With
  564 its inclusion, it is now possible to write 64-bit interrupt service routines
  565 in pure D.
  566 </p>
  567 
  568 <pre class="d_code notranslate"><span class="d_keyword">void</span> isr()
  569 {
  570     <span class="d_keyword">asm</span>
  571     {
  572         naked;
  573         <span class="d_comment">// ...
  574 </span>        iretq;
  575     }
  576 }
  577 </pre>
  578 </li>
  579 
  580 <li><a class="anchor" title="Permalink to this section" id="min_runtime_classes" href="#min_runtime_classes">Interfaces and classes can be used without the runtime if only static fields are utilized</a>
  581 
  582 <p>Prior to this release any attempt to use interfaces and/or classes without the runtime would result
  583 in compile-time errors due to the lack of <span class="d_inlinecode donthyphenate notranslate">TypeInfo</span>.  However, as long as classes are not instantiated
  584 there is no need for <span class="d_inlinecode donthyphenate notranslate">TypeInfo</span>.
  585 </p>
  586 
  587 <p>Beginning with this release the compiler will no longer emit errors about missing <span class="d_inlinecode donthyphenate notranslate">TypeInfo</span> when
  588 using interfaces and/or classes as long as they are not instantiated and only <span class="d_inlinecode donthyphenate notranslate">shared static</span> members are
  589 utilized.
  590 </p>
  591 
  592 <p><b>Example 1</b>
  593 </p>
  594 <pre class="d_code notranslate"><span class="d_keyword">module</span> object
  595 
  596 <span class="d_keyword">private</span> <span class="d_keyword">alias</span> <span class="d_keyword">extern</span>(C) <span class="d_keyword">int</span> <span class="d_keyword">function</span>(<span class="d_keyword">char</span>[][] args) MainFunc;
  597 <span class="d_keyword">private</span> <span class="d_keyword">extern</span> (C) <span class="d_keyword">int</span> _d_run_main(<span class="d_keyword">int</span> argc, <span class="d_keyword">char</span>** argv, MainFunc mainFunc)
  598 {
  599     <span class="d_keyword">return</span> mainFunc(<span class="d_keyword">null</span>);  <span class="d_comment">// assumes `void main()` for simplicity
  600 </span>}
  601 </pre>
  602 
  603 <pre class="d_code notranslate"><span class="d_keyword">interface</span> I
  604 {
  605     <span class="d_keyword">shared</span> <span class="d_keyword">static</span> <span class="d_keyword">int</span> i;
  606 }
  607 
  608 <span class="d_keyword">class</span> A : I
  609 {
  610     <span class="d_keyword">shared</span> <span class="d_keyword">static</span> <span class="d_keyword">int</span> a;
  611 }
  612 
  613 <span class="d_keyword">class</span> B : A
  614 {
  615     <span class="d_keyword">shared</span> <span class="d_keyword">static</span> <span class="d_keyword">int</span> b;
  616 }
  617 
  618 <span class="d_keyword">void</span> main()
  619 {
  620     B.b = B.a + B.i;
  621 }
  622 </pre>
  623 
  624 <p><pre class="console notranslate">dmd -conf= -defaultlib= main.d object.d -of=main
  625 size main
  626    text    data     bss     dec     hex filename
  627    1867    1208      32    3107     c23 main
  628 </pre>
  629 </p>
  630 
  631 <p>Non-shared static members can also be used, but will require a thread-local storage (TLS) implementation.
  632 For example, on Linux the TLS implementation is already supplied by the C runtime and C
  633 standard library, so, since dmd automatically calls gcc to link the final executable, it will automatically
  634 bring in the TLS implementation.
  635 </p>
  636 
  637 <p><b>Example 2</b>
  638 </p>
  639 <pre class="d_code notranslate"><span class="d_keyword">module</span> object
  640 
  641 <span class="d_keyword">private</span> <span class="d_keyword">alias</span> <span class="d_keyword">extern</span>(C) <span class="d_keyword">int</span> <span class="d_keyword">function</span>(<span class="d_keyword">char</span>[][] args) MainFunc;
  642 <span class="d_keyword">private</span> <span class="d_keyword">extern</span> (C) <span class="d_keyword">int</span> _d_run_main(<span class="d_keyword">int</span> argc, <span class="d_keyword">char</span>** argv, MainFunc mainFunc)
  643 {
  644     <span class="d_keyword">return</span> mainFunc(<span class="d_keyword">null</span>);  <span class="d_comment">// assumes `void main()` for simplicity
  645 </span>}
  646 </pre>
  647 
  648 <pre class="d_code notranslate"><span class="d_keyword">interface</span> I
  649 {
  650     <span class="d_keyword">static</span> <span class="d_keyword">int</span> i;
  651 }
  652 
  653 <span class="d_keyword">class</span> A : I
  654 {
  655     <span class="d_keyword">static</span> <span class="d_keyword">int</span> a;
  656 }
  657 
  658 <span class="d_keyword">class</span> B : A
  659 {
  660     <span class="d_keyword">static</span> <span class="d_keyword">int</span> b;
  661 }
  662 
  663 <span class="d_keyword">void</span> main()
  664 {
  665     B.b = B.a + B.i;
  666 }
  667 </pre>
  668 
  669 <p><pre class="console notranslate">dmd -conf= -defaultlib= main.d object.d -of=main
  670 size main
  671    text    data     bss     dec     hex filename
  672    2123    1296      28    3447     d77 main
  673 </pre>
  674 </p>
  675 
  676 <p>Some platforms may require some TLS implementation code or some specialized build procedures to link
  677 in a TLS implementation.
  678 </p>
  679 
  680 <p>This will hopefully reduce friction for those using D without the runtime, porting D to new platforms,
  681 or using D from other langauges, while enabling more features and idioms of D to be used in those use cases.
  682 </p>
  683 </li>
  684 
  685 <li><a class="anchor" title="Permalink to this section" id="redundant_stc_error" href="#redundant_stc_error">Specifying redundant storage classes will now result in a compiler error</a>
  686 
  687 <p>Specifying redundant storage classes was deprecated long ago and was originally scheduled to emit a compiler error beginning with the 2.068 release.
  688 That promise has been fulfilled with this release.
  689 </p>
  690 
  691 <pre class="d_code notranslate">@safe <span class="d_keyword">void</span> f() @safe {}   <span class="d_comment">// Error: redundant attribute `@safe`
  692 </span></pre>
  693 </li>
  694 
  695 
  696  </ol></div>
  697 
  698 <div class="bugsfixed"><h4>Runtime changes</h4> <ol>
  699 <li><a class="anchor" title="Permalink to this section" id="backtrace_debug_info_macos" href="#backtrace_debug_info_macos">Filenames and line numbers have been added to stacktraces on macOS</a>
  700 
  701 <p>When an exception is throw and not caught, a stacktrace is printed. On Linux,
  702 FreeBSD and DragonFlyBSD this stacktrace includes the filenames and line numbers,
  703 if the application was built with debug info enabled. This feature has now been
  704 added to macOS.
  705 </p>
  706 
  707 <p>This requires support from the compiler since debug info is stripped by the
  708 linker on macOS.
  709 </p>
  710 
  711 <p>Example:
  712 </p>
  713 
  714 <pre class="d_code notranslate"><span class="d_keyword">void</span> bar()
  715 {
  716     <span class="d_keyword">throw</span> <span class="d_keyword">new</span> Exception(<span class="d_string">"bar"</span>);
  717 }
  718 
  719 <span class="d_keyword">void</span> foo()
  720 {
  721     bar();
  722 }
  723 
  724 <span class="d_keyword">void</span> main()
  725 {
  726     foo();
  727 }
  728 </pre>
  729 
  730 <p>Compiling the above code, with debug info enabled, by running: <span class="d_inlinecode donthyphenate notranslate">dmd -g main.d</span>.
  731 When running the application it will produce an output similar to:
  732 </p>
  733 
  734 <p><pre class="console notranslate">object.Exception@main.d(3): bar
  735 main.d:3 void main.bar() [0x71afdfb]
  736 main.d:8 void main.foo() [0x71afe0c]
  737 main.d:13 _Dmain [0x71afd78]
  738 </pre>
  739 </p>
  740 </li>
  741 
  742 <li><a class="anchor" title="Permalink to this section" id="cpp_destroy" href="#cpp_destroy"><span class="d_inlinecode donthyphenate notranslate">object.destroy()</span> supports <span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> classes.</a>
  743 
  744 <p><span class="d_inlinecode donthyphenate notranslate">object.destroy()</span> was crashing when called with an <span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> class. It now correctly destructs and resets the object to <span class="d_inlinecode donthyphenate notranslate">init</span>.
  745 </p>
  746 </li>
  747 
  748 <li><a class="anchor" title="Permalink to this section" id="getsect" href="#getsect">Add missing declarations to <span class="d_inlinecode donthyphenate notranslate">core.sys.darwin.mach.getsect</span></a>
  749 
  750 <p>Declarations that were missing from <a href="https://opensource.apple.com/source/cctools/cctools-895/include/mach-o/getsect.h.auto.html">mach-o/getsect.h</a> has been added to <span class="d_inlinecode donthyphenate notranslate">core.sys.darwin.mach.getsect</span>.
  751 </p>
  752 </li>
  753 
  754 
  755  </ol></div>
  756 
  757 <div class="bugsfixed"><h4>Library changes</h4> <ol>
  758 <li><a class="anchor" title="Permalink to this section" id="remove_std_c" href="#remove_std_c">The deprecated <span class="d_inlinecode donthyphenate notranslate">std.c</span> package has been removed.</a>
  759 
  760 <p>Use the <span class="d_inlinecode donthyphenate notranslate">core.stdc</span> package instead.
  761 </p>
  762 </li>
  763 
  764 <li><a class="anchor" title="Permalink to this section" id="std-algorithm-iteration-joiner" href="#std-algorithm-iteration-joiner">The performance of <span class="d_inlinecode donthyphenate notranslate">std.algorithm.iteration.joiner</span> has been improved</a>
  765 
  766 <p><h4>DMD</h4>
  767 </p>
  768 
  769 <p><pre class="console notranslate">&gt; dmd -O -inline -release ./joiner.d &amp;&amp; ./joiner
  770 before.joiner   = 57 secs, 834 ms, 289 μs, and 3 hnsecs
  771 new.joiner      = 44 secs, 936 ms, 706 μs, and 5 hnsecs
  772 </pre>
  773 </p>
  774 
  775 <p><h4>LDC</h4>
  776 </p>
  777 
  778 <p><pre class="console notranslate">&gt; ldmd -O3 -release -inline joiner.d &amp;&amp; ./joiner
  779 before.joiner   = 5 secs, 180 ms, 193 μs, and 7 hnsecs
  780 new.joiner      = 3 secs, 168 ms, 560 μs, and 6 hnsecs
  781 </pre>
  782 </p>
  783 
  784 <p>The benchmark code can be found <a href="https://gist.github.com/wilzbach/ffd5d20639766a831fd4b1962572897a">here</a>.
  785 </p>
  786 </li>
  787 
  788 <li><a class="anchor" title="Permalink to this section" id="std-algorithm-mutation-remove" href="#std-algorithm-mutation-remove"><span class="d_inlinecode donthyphenate notranslate">std.algorithm.mutation.remove</span> now only accepts integral values or pair of integral values as offset</a>
  789 
  790 <p>Previously, without being stated in the documentation,
  791 <a href="../phobos/std_algorithm.html#.remove"><span class="d_inlinecode donthyphenate notranslate">std.algorithm.remove</span></a> used to accept any values as <span class="d_inlinecode donthyphenate notranslate">offset</span>.
  792 This behavior was very error-prone:
  793 </p>
  794 
  795 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.algorithm, std.stdio;
  796 [0, 1, 2, 3, 4].remove(1, 3).writeln; <span class="d_comment">// 0, 2, 4  -- correct
  797 </span>[0, 1, 2, 3, 4].remove([1, 3]).writeln; <span class="d_comment">// 0, 3, 4  -- incorrect
  798 </span></pre>
  799 
  800 <p>With this release, using arrays as individual elements is no longer valid.
  801 <a href="../phobos/std_typecons.html#.tuple"><span class="d_inlinecode donthyphenate notranslate">std.typecons.tuple</span></a> can be used to explicitly indicate that a range
  802 from <span class="d_inlinecode donthyphenate notranslate">start</span> to <span class="d_inlinecode donthyphenate notranslate">stop</span> (non-enclosing) should be removed:
  803 </p>
  804 
  805 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.algorithm, std.stdio, std.typecons;
  806 [0, 1, 2, 3, 4].remove(tuple(1, 3)).writeln; <span class="d_comment">// 0, 3, 4
  807 </span></pre>
  808 
  809 <p>However, only 2-tuples are allowed to avoid this un-intuitive scenario:
  810 </p>
  811 
  812 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.algorithm, std.stdio, std.typecons;
  813 [0, 1, 2, 3, 4].remove(tuple(1, 3, 4)).writeln; <span class="d_comment">// 0, 4?
  814 </span></pre>
  815 </li>
  816 
  817 <li><a class="anchor" title="Permalink to this section" id="std-math-fminmax" href="#std-math-fminmax">Changed semantics of std.math.{fmin,fmax} wrt. NaNs.</a>
  818 
  819 <p>The semantics of <a href="../phobos/std_math.html#.fmin"><span class="d_inlinecode donthyphenate notranslate">std.math.fmin</span></a> and <a href="../phobos/std_math.html#.fmax"><span class="d_inlinecode donthyphenate notranslate">std.math.fmax</span></a> have been
  820 streamlined with the C functions: if one of the arguments is a NaN, return the
  821 other. This involves an additional <a href="../phobos/std_math.html#.isNaN"><span class="d_inlinecode donthyphenate notranslate">std.math.isNaN</span></a> check. Use
  822 <a href="../phobos/std_algorithm_comparison.html#.min"><span class="d_inlinecode donthyphenate notranslate">std.algorithm.comparison.min</span></a> and <a href="../phobos/std_algorithm_comparison.html#.max"><span class="d_inlinecode donthyphenate notranslate">std.algorithm.comparison.max</span></a>
  823 for the previous semantics performing a single comparison.
  824 </p>
  825 
  826 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.math;
  827 <span class="d_keyword">assert</span>(fmin(<span class="d_keyword">real</span>.nan, 2.0L) == 2.0L);
  828 <span class="d_keyword">assert</span>(fmin(2.0L, <span class="d_keyword">real</span>.nan) == 2.0L); <span class="d_comment">// previously: NaN
  829 </span><span class="d_keyword">assert</span>(isNaN(fmin(<span class="d_keyword">real</span>.nan, <span class="d_keyword">real</span>.nan)));
  830 
  831 <span class="d_keyword">import</span> std.algorithm.comparison;
  832 <span class="d_keyword">assert</span>(min(<span class="d_keyword">real</span>.nan, 2.0L) == 2.0L);
  833 <span class="d_keyword">assert</span>(isNaN(min(2.0L, <span class="d_keyword">real</span>.nan)));
  834 <span class="d_keyword">assert</span>(isNaN(min(<span class="d_keyword">real</span>.nan, <span class="d_keyword">real</span>.nan)));
  835 </pre>
  836 </li>
  837 
  838 
  839  </ol></div>
  840 
  841 <div class="bugsfixed"><h4>Dub changes</h4> <ol>
  842 <li><a class="anchor" title="Permalink to this section" id="customCachePaths" href="#customCachePaths">DUB supports "customCachePaths" for providing read-only package paths</a>
  843 
  844 <p>With this release DUB allows defining additional paths that contain packages in subfolders with the pattern "(name)-(version)/(name)/" by defining a "customCachePaths" field in <span class="d_inlinecode donthyphenate notranslate">/etc/dub/settings.json</span> or <span class="d_inlinecode donthyphenate notranslate">~/.dub/settings.json.</span>
  845 </p>
  846 
  847 <p>"customCachePaths" can be used to provide prebuilt DUB libraries (e.g. for distribution package maintainers).
  848 </p>
  849 </li>
  850 
  851 
  852  </ol></div>
  853 
  854 <br><em class="big"><a class="anchor" title="Permalink to this section" id="bugfix-list" href="#bugfix-list">List of all bug fixes and enhancements in D 2.081.0:</a></em>
  855 
  856 <div class="bugsfixed"><h4>DMD Compiler regressions</h4> <ol>
  857 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18068">Bugzilla 18068</a>: No file names and line numbers in stack trace</li>
  858 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18821">Bugzilla 18821</a>: DMD segfault when doing unsafe operation outside of any function</li>
  859 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18905">Bugzilla 18905</a>: [Reg 2.079] C++ classes can no longer be used with -betterC</li>
  860 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18936">Bugzilla 18936</a>: Internal error: dmd/backend/cgxmm.c 684</li>
  861 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19024">Bugzilla 19024</a>: [REG 2.081-beta] AssertError@dmd/dsymbolsem.d(4317): Assertion failure</li>
  862  </ol></div>
  863 <div class="bugsfixed"><h4>DMD Compiler bugs</h4> <ol>
  864 <li><a href="https://issues.dlang.org/show_bug.cgi?id=5153">Bugzilla 5153</a>: Struct pointer to struct variable assign error message</li>
  865 <li><a href="https://issues.dlang.org/show_bug.cgi?id=7443">Bugzilla 7443</a>: Better diagnostic on wrongly written static constructor</li>
  866 <li><a href="https://issues.dlang.org/show_bug.cgi?id=11742">Bugzilla 11742</a>: cannot inizialize void initialized static variable in static constructor.</li>
  867 <li><a href="https://issues.dlang.org/show_bug.cgi?id=12764">Bugzilla 12764</a>: Disabled struct default construction circumvented when field is written to</li>
  868 <li><a href="https://issues.dlang.org/show_bug.cgi?id=12807">Bugzilla 12807</a>: UFCS checks "alias this" attributes even when not called</li>
  869 <li><a href="https://issues.dlang.org/show_bug.cgi?id=13435">Bugzilla 13435</a>: Strange error if struct is a class member and opAssign applied</li>
  870 <li><a href="https://issues.dlang.org/show_bug.cgi?id=13741">Bugzilla 13741</a>: std.traits.moduleName &amp; packageName do not work with functions that have parameters</li>
  871 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14178">Bugzilla 14178</a>: C++ linux name mangling does not handle standard abbreviations for const types</li>
  872 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14739">Bugzilla 14739</a>: Immutable alias to template triggers dmd assert</li>
  873 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15068">Bugzilla 15068</a>: wrong error message on attempting to use type as template</li>
  874 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15388">Bugzilla 15388</a>: extern(C++) - typeof(null) should mangle as nullptr_t</li>
  875 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15475">Bugzilla 15475</a>: Ddoc code sample with unbalanced paren comes out as macro</li>
  876 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15574">Bugzilla 15574</a>: wrong order of linker arguments</li>
  877 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15755">Bugzilla 15755</a>: DMD segfault upon alias on alias on __trait(getAttributes, ...)</li>
  878 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15869">Bugzilla 15869</a>: RVO can overwrite argument</li>
  879 <li><a href="https://issues.dlang.org/show_bug.cgi?id=16088">Bugzilla 16088</a>: Parse error for import expression in statement</li>
  880 <li><a href="https://issues.dlang.org/show_bug.cgi?id=16206">Bugzilla 16206</a>: traits getOverloads fails when one of the overload is a templatized function</li>
  881 <li><a href="https://issues.dlang.org/show_bug.cgi?id=17373">Bugzilla 17373</a>: traits getOverloads + multiple interface inheritance only see one of the interfaces' overloads</li>
  882 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18228">Bugzilla 18228</a>: this(this a){} doesn't generate postblit ctor; this(this){} does</li>
  883 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18236">Bugzilla 18236</a>: Invalid line reported on error casting enum</li>
  884 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18266">Bugzilla 18266</a>: ICE: should allow reusing identifier in declarations in disjoint scopes in a function</li>
  885 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18365">Bugzilla 18365</a>: header file generation doesn't include the return attribute</li>
  886 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18584">Bugzilla 18584</a>: Undefined identifier when not specifying 'this'</li>
  887 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18730">Bugzilla 18730</a>: dmd miscompiles core.bitop.bt with -O</li>
  888 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18746">Bugzilla 18746</a>: function returning empty struct isn't called if used in equality expression</li>
  889 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18775">Bugzilla 18775</a>: DMD falsely reports deprecation for deprecated implicit casts that were not used in UFCS</li>
  890 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18803">Bugzilla 18803</a>: just "static if" in nested import crashes dmd</li>
  891 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18828">Bugzilla 18828</a>: [-betterC] helpless error in object.d</li>
  892 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18858">Bugzilla 18858</a>: switch 'skips declaration' test only checks last declaration</li>
  893 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18868">Bugzilla 18868</a>: Separate compilation generates two static this functions, runs it twice</li>
  894 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18888">Bugzilla 18888</a>: extern(C++) template arg/alias arg mangling issue</li>
  895 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18890">Bugzilla 18890</a>: extern(C++) mangles all destructors the same</li>
  896 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18891">Bugzilla 18891</a>: extern(C++) destructor prototype should just link; not generate field/aggregate dtor</li>
  897 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18892">Bugzilla 18892</a>: Wrong type in error message for static members and alias this</li>
  898 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18916">Bugzilla 18916</a>: ICE using Typedef and __LINE__</li>
  899 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18922">Bugzilla 18922</a>: dmd doesn't do substitutions for C++ namespaces in different module/file</li>
  900 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18928">Bugzilla 18928</a>: extern(C++) bad codegen, wrong calling convention</li>
  901 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18951">Bugzilla 18951</a>: package static method masked by public static method in class</li>
  902 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18953">Bugzilla 18953</a>: Win32: extern(C++) struct destructor not called correctly through runtime</li>
  903 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18957">Bugzilla 18957</a>: extern(C++) doesn't mangle 'std' correctly on posix systems</li>
  904 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18966">Bugzilla 18966</a>: extern(C++) constructor should match C++ semantics assigning vtable</li>
  905 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18970">Bugzilla 18970</a>: DMD segfault due to opDispatch</li>
  906 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18976">Bugzilla 18976</a>: Inconsistency in overload merging with aliases</li>
  907 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18984">Bugzilla 18984</a>: Debugging stack structs which are returned causes incorrect debuginfo.</li>
  908  </ol></div>
  909 <div class="bugsfixed"><h4>DMD Compiler enhancements</h4> <ol>
  910 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14086">Bugzilla 14086</a>: Invalid extern C++ name for constructor / destructor</li>
  911 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15589">Bugzilla 15589</a>: extern(C++) virtual destructors are not put in vtbl[]</li>
  912 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15691">Bugzilla 15691</a>: Improve error message for struct member initializer</li>
  913 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18859">Bugzilla 18859</a>: Silence class allocator/deallocator deprecation warning if they are marked "deprecated"</li>
  914 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18963">Bugzilla 18963</a>: Relax restrictions on 'return' parameters when parameter is not a pointer</li>
  915  </ol></div>
  916 <div class="bugsfixed"><h4>Phobos regressions</h4> <ol>
  917 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18937">Bugzilla 18937</a>: [REG 2.080.0] std.experimental.allocator: compiling <span class="d_inlinecode donthyphenate notranslate">make</span> needs an unreasonable amount of memory for structs that contain static arrays</li>
  918 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18993">Bugzilla 18993</a>: toLower is broken for UTF chars</li>
  919  </ol></div>
  920 <div class="bugsfixed"><h4>Phobos bugs</h4> <ol>
  921 <li><a href="https://issues.dlang.org/show_bug.cgi?id=12086">Bugzilla 12086</a>: std.algorithm.remove + range of indices produces wrong results</li>
  922 <li><a href="https://issues.dlang.org/show_bug.cgi?id=17084">Bugzilla 17084</a>: Can't sort array of structs with alias this: swap can't call non-@nogc function doesPointTo</li>
  923 <li><a href="https://issues.dlang.org/show_bug.cgi?id=17806">Bugzilla 17806</a>: processAllocator getter will override set value if it was set before getter was called at least once</li>
  924 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18415">Bugzilla 18415</a>: Typedef ignores @disabled default constructor</li>
  925 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18470">Bugzilla 18470</a>: std.algorithm.splitter has frame access problems for custom preds</li>
  926 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18525">Bugzilla 18525</a>: Constraint on std.algorithm.mutation.remove fails with char[]</li>
  927 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18760">Bugzilla 18760</a>: theAllocator should hold a reference to the allocator that it uses</li>
  928 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18847">Bugzilla 18847</a>: std.allocator: Region uses .parent before it can be set</li>
  929 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18934">Bugzilla 18934</a>: std.concurrency receive throws assertion failure if message is a struct containing const data</li>
  930 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18940">Bugzilla 18940</a>: [std.net.curl]Can't run examples on page. cannot implicitly convert expression ... <span class="d_inlinecode donthyphenate notranslate">char[]</span> to <span class="d_inlinecode donthyphenate notranslate">string</span></li>
  931 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18952">Bugzilla 18952</a>: std.experimental.checkedint.Saturate prints integral promotion deprecation message</li>
  932 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19020">Bugzilla 19020</a>: findSkip, findSplit and findSplitBefore return wrong results</li>
  933 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19023">Bugzilla 19023</a>: findSplitBefore and findSplitAfter give wrong bool result</li>
  934  </ol></div>
  935 <div class="bugsfixed"><h4>Phobos enhancements</h4> <ol>
  936 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18178">Bugzilla 18178</a>: std.path should be usable in @safe</li>
  937 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18593">Bugzilla 18593</a>: std.datetime.stopwatch.benchmark shouldn't optimize away its functions</li>
  938 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18766">Bugzilla 18766</a>: std.typecons.Tuple.toHash could be improved</li>
  939 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18813">Bugzilla 18813</a>: fromStringz should work with char, wchar and dchar</li>
  940 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18837">Bugzilla 18837</a>: MMFile should have opDollar</li>
  941 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18948">Bugzilla 18948</a>: std.uni.toLower and std.uni.toUpper should work with random access ranges</li>
  942  </ol></div>
  943 <div class="bugsfixed"><h4>Druntime regressions</h4> <ol>
  944 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18996">Bugzilla 18996</a>: Inserting a type containing indirections into an std.container Array causes SIGILL(4). Illegal Instruction.</li>
  945 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19005">Bugzilla 19005</a>: [REG2.081-b1] object.hashOf no longer works for std.datetime.date.Date</li>
  946  </ol></div>
  947 <div class="bugsfixed"><h4>Druntime bugs</h4> <ol>
  948 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14536">Bugzilla 14536</a>: Calling destroy() on a on an extern(C++) class causes a segfault</li>
  949 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18932">Bugzilla 18932</a>: core.internal.hash.hashOf(val, seed) ignores <span class="d_inlinecode donthyphenate notranslate">seed</span> when val is a raw pointer</li>
  950 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18989">Bugzilla 18989</a>: On OSX32, core.stdc.time.clock() should resolve to clock$UNIX2003()</li>
  951 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19008">Bugzilla 19008</a>: core.internal.convert.toUbyte doesn't work on enums</li>
  952  </ol></div>
  953 <div class="bugsfixed"><h4>Druntime enhancements</h4> <ol>
  954 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18768">Bugzilla 18768</a>: object.getArrayHash with custom toHash shouldn't just sum hashes of array elements</li>
  955 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18920">Bugzilla 18920</a>: core.internal.hash of array of scalars should be <span class="d_inlinecode donthyphenate notranslate">@safe</span></li>
  956 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18924">Bugzilla 18924</a>: Use addition rather than XOR for order-independent hash combination</li>
  957 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18925">Bugzilla 18925</a>: core.internal.hash auto-hash for structs of scalar fields should be <span class="d_inlinecode donthyphenate notranslate">@safe</span></li>
  958 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18943">Bugzilla 18943</a>: core.internal.hash remove outdated special case for DMD unaligned reads</li>
  959  </ol></div>
  960 <div class="bugsfixed"><h4>dlang.org bugs</h4> <ol>
  961 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18752">Bugzilla 18752</a>: std.file.read runnable example fails</li>
  962 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18761">Bugzilla 18761</a>: Page for assumeUnique documentation displays incorrectly</li>
  963  </ol></div>
  964 <div class="bugsfixed"><h4>dlang.org enhancements</h4> <ol>
  965 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14099">Bugzilla 14099</a>: Promote DPaste (dpaste.dzfl.pl) to run.dlang.org</li>
  966 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18869">Bugzilla 18869</a>: Add Jumia Food to organizations using D</li>
  967 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18874">Bugzilla 18874</a>: Add thatneedle.com to organizations using D</li>
  968 <li><a href="https://issues.dlang.org/show_bug.cgi?id=18959">Bugzilla 18959</a>: [Change Log: 2.079.0] substitute was added in std.algorithm.iteration but the changelog points to std.algorithm.searching</li>
  969  </ol></div>
  970 
  971 </div>
  972 <h3><a class="anchor" title="Permalink to this section" id="contributors" href="#contributors">Contributors to this release (51)</a></h3>
  973 <p>A huge thanks goes to all the awesome people who made this release possible.</p>
  974 <ul>    <li>aG0aep6G</li>
  975     <li>Alexandru Jercaianu</li>
  976     <li>Andrei Alexandrescu</li>
  977     <li>Basile Burg</li>
  978     <li>Bastiaan Veelo</li>
  979     <li>BBasile</li>
  980     <li>carblue</li>
  981     <li>David Bennett</li>
  982     <li>David Gileadi</li>
  983     <li>Diederik de Groot</li>
  984     <li>Dmitry Olshansky</li>
  985     <li>Eduard Staniloiu</li>
  986     <li>Giles Bathgate</li>
  987     <li>Iain Buclaw</li>
  988     <li>Jack Stouffer</li>
  989     <li>Jacob Carlborg</li>
  990     <li>jercaianu</li>
  991     <li>Joakim Noah</li>
  992     <li>Johan Engelen</li>
  993     <li>John Colvin</li>
  994     <li>Jonathan Marler</li>
  995     <li>kinke</li>
  996     <li>Leandro Lucarella</li>
  997     <li>leitimmel</li>
  998     <li>Manu Evans</li>
  999     <li>Martin Nowak</li>
 1000     <li>Mathias Lang</li>
 1001     <li>Mathis Beer</li>
 1002     <li>Mike Franklin</li>
 1003     <li>Mike Parker</li>
 1004     <li>Nathan Sashihara</li>
 1005     <li>Nicholas Lindsay Wilson</li>
 1006     <li>Nick Treleaven</li>
 1007     <li>Quirin F. Schroll</li>
 1008     <li>Radosław Rusiniak</li>
 1009     <li>Radu Racariu</li>
 1010     <li>Rainer Schuetze</li>
 1011     <li>Razvan Nitu</li>
 1012     <li>Remi Thebault</li>
 1013     <li>Roman Chistokhodov</li>
 1014     <li>Sebastian Wilzbach</li>
 1015     <li>Simen Kjærås</li>
 1016     <li>Steven Schveighoffer</li>
 1017     <li>Tero Hänninen</li>
 1018     <li>thaven</li>
 1019     <li>Thibaut CHARLES</li>
 1020     <li>Timon Gehr</li>
 1021     <li>Timoses</li>
 1022     <li>Tomáš Chaloupka</li>
 1023     <li>Vladimir Panteleev</li>
 1024     <li>Walter Bright</li>
 1025 </ul>
 1026 
 1027 
 1028 <div class="changelog-nav">previous version: <a href="2.080.1.html">2.080.1</a>
 1029 &ndash; next version: <a href="2.081.1.html">2.081.1</a></div>
 1030 
 1031 
 1032         <div class="smallprint" id="copyright">Copyright &copy; 1999-2020 by the <a href="../foundation_overview.html">D Language Foundation</a> | Page generated by
 1033 <a href="../spec/ddoc.html">Ddoc</a> on Fri Nov 20 21:58:05 2020
 1034 </div>
 1035     </div>
 1036 </div>
 1037 
 1038     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 1039     <script type="text/javascript">window.jQuery || document.write('\x3Cscript src="../js/jquery-1.7.2.min.js">\x3C/script>');</script>
 1040     <script type="text/javascript" src="../js/dlang.js"></script>
 1041     
 1042     <script type="text/javascript" src="../js/codemirror-compressed.js"></script>
 1043     <script type="text/javascript" src="../js/run.js"></script>
 1044 
 1045 
 1046 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
 1047 </body>
 1048 </html>