Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / filesystem / doc / release_history.html
index 062fe5b..85ddd4c 100644 (file)
     </td>
 </table>
 
+<h2>1.72.0</h2>
+<ul>
+  <li>Extracted <code>filesystem_error</code> to <code>exception.hpp</code>; <code>file_status</code> and associated enums and functions to <code>file_status.hpp</code>; <code>directory_entry</code>, <code>directory_iterator</code> and <code>recursive_directory_iterator</code> to <code>directory.hpp</code>.</li>
+  <li><b>Deprecated:</b> For backward compatibility <code>operations.hpp</code> still includes the new headers <code>exception.hpp</code>, <code>file_status.hpp</code> and <code>directory.hpp</code>, unless <code>BOOST_FILESYSTEM_NO_DEPRECATED</code> macro is defined. These implicit includes are considered deprecated and will be removed in a future release. Users are encouraged to include the new headers directly or include <code>filesystem.hpp</code>.</li>
+  <li>The <code>filesystem_error</code> exception is now implemented in the compiled library of Boost.Filesystem. Users may need to add linking with Boost.Filesystem library in their projects.</li>
+  <li>On POSIX.1-2008 platforms, use <code>utimensat</code> instead of <code>utime</code>. <code>utime</code> is declared obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. (<a href="https://github.com/boostorg/filesystem/pull/115">PR#115</a>)</li>
+  <li><code>directory_iterator</code> is now left in the end state on memory allocation errors.</li>
+  <li>In <code>directory_iterator</code> on POSIX systems, support for <code>readdir</code>/<code>readdir_r</code> has been reworked to avoid memory allocations for <code>dirent</code> structures when <code>readdir</code> is used. This reduces memory consumption and eliminates the possibility of buffer overruns in case if <code>readdir</code> produces a very long directory name.</li>
+  <li>On Windows, use Boost.WinAPI to select the target Windows version.</li>
+  <li><b>New:</b> Added <code>directory_options</code> enum, which reflects the same named enum from C++20. The enum is supported in <code>directory_iterator</code> and <code>recursive_directory_iterator</code> to customize iteration behavior. In particular, the iterators now support skipping directories that can&apos;t be opened due to insufficient permissions. The <code>symlink_option</code> enum is now deprecated and should be replaced with <code>directory_options</code>.</li>
+  <li>By default, <code>recursive_directory_iterator</code> is now reset to the end state in case of errors, as required by C++20. (<a href="https://github.com/boostorg/filesystem/issues/112">#112</a>)</li>
+  <li><b>New:</b> Added <code>directory_options::pop_on_error</code> option, which configures <code>recursive_directory_iterator</code> so that it attempts to recover from iteration errors by repeatedly invoking <code>pop()</code> until it succeeds or the end state is reached. (<a href="https://github.com/boostorg/filesystem/issues/113">#113</a>)</li>
+  <li><b>New:</b> Added <code>directory_options::skip_dangling_symlinks</code> option, which configures <code>recursive_directory_iterator</code> so that it doesn't follow dangling directory symlinks and continues iteration instead of reporting an error.</li>
+  <li><b>Deprecated:</b> The following members of <code>recursive_directory_iterator</code> are now marked as deprecated: <code>level()</code>, <code>no_push_pending()</code>, <code>no_push_request()</code>, <code>no_push()</code>. Users are advised to replace their use with the standard counterparts: <code>depth()</code>, <code>recursion_pending()</code>, <code>disable_recursion_pending()</code>. Note that <code>recursion_pending()</code> has the opposite meaning compared to <code>no_push_pending()</code> and <code>no_push_request()</code>. Deprecated methods will be removed in a future release.</li>
+  <li>Fixed <code>path::lexically_relative</code> (and any dependent algorithms) to correctly handle empty, dot and dot-dot path elements in its argument. The behavior is made closer to C++17 <code>std::path::lexically_relative</code> in that empty and dot path elements are ignored and dot-dot path elements are accounted by decreasing the number of dot-dot path elements to generate in the resulting relative path. (<a href="https://github.com/boostorg/filesystem/issues/76">#76</a>)</li>
+</ul>
+
+<h2>1.71.0</h2>
+<ul>
+  <li><b>New:</b> Added minimal support for CMake. (<a href="https://github.com/boostorg/filesystem/pull/106">PR#106</a>)</li>
+  <li>Fixed incorrect <code>error_code</code> returned from directory iterator increment when <code>readdir_r</code> is used.</li>
+  <li>For <code>path</code>, fixed rvalue-aware <code>operator/</code> return type to return an rvalue instead of rvalue reference. This fixes leaving a dangling reference in the user&apos;s code if the result of <code>operator/</code> is bound to a const reference. (<a href="https://github.com/boostorg/filesystem/issues/110">#110</a>)</li>
+  <li>Fixes for better compatibility with Windows CE. (<a href="https://github.com/boostorg/filesystem/pull/24">PR#24</a>)</li>
+</ul>
+
+<h2>1.70.0</h2>
+<ul>
+  <li><b>New:</b> Added support for movability to directory iterators.</li>
+  <li><b>New:</b> Added file status query overloads for directory_entry. This avoids a relatively expensive OS query when file status is requested for a result of dereferencing a directory iterator. (<a href="https://github.com/boostorg/filesystem/pull/55">PR#55</a>)</li>
+  <li>Fixed a few instances of dereferencing <code>std::string::end()</code> in path implementation.</li>
+  <li>Fixed program termination in case of out of memory condition in directory iterators constructors and operations accepting a reference to <code>error_code</code>. (<a href="https://github.com/boostorg/filesystem/issues/58">#58</a>)</li>
+  <li>Fixed possible linking errors caused by missing definitions of static members of <code>path</code>. (<a href="https://svn.boost.org/trac/boost/ticket/12759">#12759</a>)</li>
+  <li>Fixed possible use of uninitialized data in directory iterator increment operation on Linux. (<a href="https://github.com/boostorg/filesystem/issues/97">#97</a>)</li>
+  <li>Reworked <code>current_path</code> and <code>read_symlink</code> implementation to avoid possible memory exhaustion on broken or tampered with filesystems. The functions now have an internal limit of the path size they will accept from the OS, which is currently 16 MiB.</li>
+  <li>Increased the size of the internal buffer used by <code>copy_file</code>.</li>
+</ul>
+
+<h2>1.69.0</h2>
+<ul>
+  <li>Don&apos;t use <code>readdir_r</code> on Linux and Android since the <code>readdir</code> function is already thread-safe. (<a href="https://github.com/boostorg/filesystem/pull/68">PR#68</a>,
+    <a href="https://github.com/boostorg/filesystem/issues/72/">#72</a>)</li>
+  <li>Fixed crashes in <code>boost::filesystem::copy</code> due to undefined behavior in the implementation. (<a href="https://github.com/boostorg/filesystem/pull/71">PR#71</a>)</li>
+  <li>Fixed undefined behavior in <code>boost::filesystem::directory_iterator</code> implementation. (<a href="https://github.com/boostorg/filesystem/pull/77">PR#77</a>)</li>
+  <li>Fixed compilation errors when using directory iterators with <code>BOOST_FOREACH</code>.</li>
+  <li>Removed workarounds for older PGI C++ compiler versions to fix compilation on the newer ones. (<a href="https://github.com/boostorg/filesystem/pull/49">PR#49</a>)</li>
+  <li>Fixed MSVC warnings about narrowing conversions. (<a href="https://github.com/boostorg/filesystem/pull/44">PR#44</a>)</li>
+</ul>
+
+<h2>1.67.0</h2>
+<ul>
+  <li>Fix static initialization issue that caused a crash if path operations were used before main(). (<a href="https://github.com/boostorg/filesystem/pull/62">PR#62</a>,
+    <a href="https://github.com/boostorg/filesystem/pull/43">PR#43</a>, <a href="https://github.com/boostorg/filesystem/pull/50">PR#50</a>, <a href="https://github.com/boostorg/filesystem/pull/59">PR#59</a>)</li>
+</ul>
+
 <h2>1.66.0</h2>
 <ul>
-  <li>Clean up some tutorial example code and fix the wording for it in the 
-  tutorial. Thanks to Anmol-Singh-Jaggi for pull request #11.</li>
+  <li>Clean up some tutorial example code and fix the wording for it in the
+  tutorial. Thanks to Anmol-Singh-Jaggi for pull request <a href="https://github.com/boostorg/filesystem/pull/11">#11</a>.</li>
 </ul>
 
 <h2>1.64.0</h2>
 <ul>
-  <li><code>is_empty()</code>overload with <code>error_code</code> parameter 
+  <li><code>is_empty()</code>overload with <code>error_code</code> parameter
   should not throw on error. Thanks to ldqrk for pull request #42</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/10731">#10731</a> and
-  <a href="https://svn.boost.org/trac/boost/ticket/9480">#9480</a>, <i>Evaluate 
+  <a href="https://svn.boost.org/trac/boost/ticket/9480">#9480</a>, <i>Evaluate
   path.extension only once</i>. Thanks to Daniel Krügler for pull request #41.</li>
-  <li>Fix error propagation in <code>space(p, ec)</code>. Thanks to cmuellner 
+  <li>Fix error propagation in <code>space(p, ec)</code>. Thanks to cmuellner
   for pull request #39.</li>
-  <li>Add test/config_info.cpp to increase macro state reporting in hopes of 
+  <li>Add test/config_info.cpp to increase macro state reporting in hopes of
   easing debugging on remote machines.</li>
-  <li>Fix <code>operations_test</code> failure on MinGW: MinGW defines 
-  __MINGW32__ rather than _MSC_VER, so also test for __MINGW32__ to see if 
+  <li>Fix <code>operations_test</code> failure on MinGW: MinGW defines
+  __MINGW32__ rather than _MSC_VER, so also test for __MINGW32__ to see if
   setenv/unsetenv workaround needed.</li>
 </ul>
 
   <p dir="ltr"><b>Deprecated <code>generic()</code> function name</b>: The undocumented experimental class
   <code>path</code> member function <code>generic()</code> has been renamed <code>
   generic_path()</code>. Fixes
-  <a href="https://svn.boost.org/trac/boost/ticket/11855">#11855</a>, <i>generic 
-  gives problems in C++/CLI.</i> Unless the macro BOOST_FILESYSTEM_NO_DEPRECATED 
-  is defined, the original <code>generic()</code> will continue to be supplied 
-  as a workaround for existing user code. But <code>generic()</code>is 
+  <a href="https://svn.boost.org/trac/boost/ticket/11855">#11855</a>, <i>generic
+  gives problems in C++/CLI.</i> Unless the macro BOOST_FILESYSTEM_NO_DEPRECATED
+  is defined, the original <code>generic()</code> will continue to be supplied
+  as a workaround for existing user code. But <code>generic()</code>is
   deprecated. User code should migrate to the new name.</li>
   <li><b>New:</b> Class <code>path</code> adds constexpr constants <code>
-  separator</code> and <code>dot</code> of the type appropriate for the 
+  separator</code> and <code>dot</code> of the type appropriate for the
   platform, and adds query functions <a href="reference.html#filename_is_dot">
   <code>filename_is_do</code>t</a> and <code>
-  <a href="reference.html#filename_is_dot­_dot">filename_is_dot_dot</a></code>. 
-  These add convenience and the implementations may be more efficient that user 
+  <a href="reference.html#filename_is_dot­_dot">filename_is_dot_dot</a></code>.
+  These add convenience and the implementations may be more efficient that user
   coded equivalent functions.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/12578">#12578</a>, <i>
-  Make directory iterators able to detect when a copy has advanced to the end</i>. 
+  Make directory iterators able to detect when a copy has advanced to the end</i>.
   This bug in <code>directory_iterator</code> and <code>
-  recursive_directory_iterator</code> equality testing has existed more than a 
-  dozen years. Nowadays test driven development would likely have detected the 
+  recursive_directory_iterator</code> equality testing has existed more than a
+  dozen years. Nowadays test driven development would likely have detected the
   problem in early development. Sigh.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/12495">#12495</a>, <i>
-  <code>create_directories()</code> crashes when passed empty string as path</i>, 
-  from Samantha Ritter. Also affected <code>create_directory()</code>. Charles 
+  <code>create_directories()</code> crashes when passed empty string as path</i>,
+  from Samantha Ritter. Also affected <code>create_directory()</code>. Charles
   Olivi submitted a pull request with some particularly helpful test cases.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/7307">#7307</a>, <i>
-  remove_all(dirname,ec) throws on write protected directories.</i> This is a 
-  tough one to test. There are three internal function calls where errors might 
-  arise, and it would take too much time to write tests for each of those cases. 
-  Someday we will have Titus Winter&#39;s mock installable file system, but for now 
+  remove_all(dirname,ec) throws on write protected directories.</i> This is a
+  tough one to test. There are three internal function calls where errors might
+  arise, and it would take too much time to write tests for each of those cases.
+  Someday we will have Titus Winter&#39;s mock installable file system, but for now
   are relying on code inspection rather than testing.</li>
-  <li>Fix a cygwin warning and a cygwin error. Thanks to thtrummer for pull 
+  <li>Fix a cygwin warning and a cygwin error. Thanks to thtrummer for pull
   request #30.</li>
-  <li>Fixed two broken links in reference docs. Thanks to tbeu for pull 
+  <li>Fixed two broken links in reference docs. Thanks to tbeu for pull
   request #34.</li>
-  <li>Fix reference doc signatures for <code>path</code> stem(), extension() 
+  <li>Fix reference doc signatures for <code>path</code> stem(), extension()
   member functions. Thanks to faithandbrave for pull request #31</li>
   <li>Fix broken link to <a href="https://svn.boost.org/trac/boost/ticket/7506">#7506</a> in 1.60.0 Release History (Daniel Krügler).</li>
-  <li>Refactor <code>push_directory()</code>internal logic so it is easier to 
+  <li>Refactor <code>push_directory()</code>internal logic so it is easier to
   reason about.</li>
 </ul>
 
   <a href="reference.html#lex-normal">lexically_normal</a></code>, <code>
   <a href="reference.html#lex-relative">lexically_relative</a></code>, <code>
   <a href="reference.html#op-relative">relative</a></code>, and <code>
-  <a href="reference.html#weakly_canonical">weakly_canonical</a></code>. Many thanks to Jamie Allsop for his help and 
+  <a href="reference.html#weakly_canonical">weakly_canonical</a></code>. Many thanks to Jamie Allsop for his help and
   perseverance. Resolves tickets
   <a href="https://svn.boost.org/trac/boost/ticket/1976">#1976</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/5897">#5897</a>,
   <li><b>New:</b> Class <code>path</code> now has
   <a href="reference.html#path-iterators"> <code>reverse_iterator</code>,
   <code>const_reverse_iterator</code>, <code>rbegin()</code>, and <code>rend()</code></a>. </li>
-  <li><b>New:</b> C++11 <code>noexcept</code> supplied as specified in the 
+  <li><b>New:</b> C++11 <code>noexcept</code> supplied as specified in the
   Filesystem TS if supported by the compiler.</li>
-  <li><b>New:</b> C++11 move constructors and move assignments supplied as 
+  <li><b>New:</b> C++11 move constructors and move assignments supplied as
   specified in the Filesystem TS if supported by the compiler. Resolves
   <a href="https://svn.boost.org/trac/boost/ticket/10291">#10291</a>.</li>
-  <li><b>New:</b> Existing functions whose names changed in the Filesystem TS 
+  <li><b>New:</b> Existing functions whose names changed in the Filesystem TS
   are now supported under both the old and new names.</li>
-  <li><b>New: </b>Added <code><a href="reference.html#path-size">size</a>()</code> 
+  <li><b>New: </b>Added <code><a href="reference.html#path-size">size</a>()</code>
   function to class <code>path</code>. Resolves
-  <a href="https://svn.boost.org/trac/boost/ticket/6874">#6874</a>, <i>Path 
+  <a href="https://svn.boost.org/trac/boost/ticket/6874">#6874</a>, <i>Path
   should have a size() member function</i>.</li>
   <li>Clear several spurious GCC warnings.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11733">#11733</a>, <i>
-  Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp</i> by 
+  Missing unistd.h include in boost/libs/filesystem/src/unique_path.cpp</i> by
   apply a patch from Idar Tollefsen.</li>
   <li>Fix a race condition in <code>unique_path</code> by applying
-  <a href="https://github.com/boostorg/filesystem/pull/15">pull request #15</a> 
+  <a href="https://github.com/boostorg/filesystem/pull/15">pull request #15</a>
   from Sebastian Redl. Also fixes
-  <a href="https://svn.boost.org/trac/boost/ticket/7506">#7506</a>, <i><code>unique_path</code> Fails on Windows for Temporary User 
+  <a href="https://svn.boost.org/trac/boost/ticket/7506">#7506</a>, <i><code>unique_path</code> Fails on Windows for Temporary User
   Profiles</i>.</li>
   <li>Fix bug in <i><code>file_status</code></i> and <i><code>
-  recursive_directory_iterator</code></i>: C++ turns an explicit constructor 
-  with all arguments except first defaulted into non-explicit single argument 
+  recursive_directory_iterator</code></i>: C++ turns an explicit constructor
+  with all arguments except first defaulted into non-explicit single argument
   constructor.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/10591">#10591</a>, <i>
-  boost::filesystem does not build on iOS 8</i>, by applying a patch submitted 
+  boost::filesystem does not build on iOS 8</i>, by applying a patch submitted
   by Daniel Seither.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/9454">#9454</a>, <i>
-  Boost Filesystem [library build] not compiling when 
-  BOOST_FILESYSTEM_NO_DEPRECATED is defined</i>, by applying a patch submitted 
+  Boost Filesystem [library build] not compiling when
+  BOOST_FILESYSTEM_NO_DEPRECATED is defined</i>, by applying a patch submitted
   by Makesim.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11447">#11447</a>, <i>
-  __OpenBSD__ macro name misspelled</i>, by applying a patch submitted by Jasper 
+  __OpenBSD__ macro name misspelled</i>, by applying a patch submitted by Jasper
   Lievisse Adriaanse.</li>
   <li>
   <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/11288">#11288</a>, <i>
-  <font face="Arial">A patch to avoid redundant string allocations</font></i>, 
+  <font face="Arial">A patch to avoid redundant string allocations</font></i>,
   by applying a patch submitted by Yevhen Ivannikov.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11175">#11175</a>, 
-  out-of-date documentation causing users to incorrectly expect that the library 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/11175">#11175</a>,
+  out-of-date documentation causing users to incorrectly expect that the library
   could be used with exceptions disabled.</li>
-  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/11175">#11166</a> 
-  by mitigating (i.e. reducing the likelihood of) a possible external file 
+  <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/11175">#11166</a>
+  by mitigating (i.e. reducing the likelihood of) a possible external file
   system race in <code>remove()</code>.</li>
   <li>
   <p>Fix <a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
-  <i><code>create_directories</code> returns false if the path ends with a slash</i>. 
-  Also fix related issues if path contains <i>dot</i> or <i>dot-dot</i> 
+  <i><code>create_directories</code> returns false if the path ends with a slash</i>.
+  Also fix related issues if path contains <i>dot</i> or <i>dot-dot</i>
   elements, and added test cases to the test suite.</li>
   <li>
-  <p>Reference docs editorial cleanups: Use same style sheet as the 
-  rest of the documentation. Tweak tab font size. Fix excessively long lines in 
+  <p>Reference docs editorial cleanups: Use same style sheet as the
+  rest of the documentation. Tweak tab font size. Fix excessively long lines in
   tables, synopsis.</li>
   <li>Resolve <a href="https://svn.boost.org/trac/boost/ticket/10766">
-  #10766</a>, <i>parent_path() with redundant separator returns wrong value</i>, 
-  by adding examples and notes to the reference documentation to show why the 
-  returned value is in fact correct, and to provide rationale for that behavior. 
+  #10766</a>, <i>parent_path() with redundant separator returns wrong value</i>,
+  by adding examples and notes to the reference documentation to show why the
+  returned value is in fact correct, and to provide rationale for that behavior.
   See <a href="reference.html#path-iterators">[path.itr]</a>, and
   <a href="reference.html#path-decomposition">[path.decompose]</a> <code>
-  parent_path()</code> and <code>filename()</code> sections of the reference 
+  parent_path()</code> and <code>filename()</code> sections of the reference
   docs.</li>
-  <li>Minor other fixes, including pull requests from Jonathan Wakely and Marcel 
+  <li>Minor other fixes, including pull requests from Jonathan Wakely and Marcel
   Raad.</li>
-  <li>Closed several tickets as duplicates or otherwise resolved by the 
+  <li>Closed several tickets as duplicates or otherwise resolved by the
   above changes:<ul>
-  <li><a href="https://svn.boost.org/trac/boost/ticket/7607">#7607</a>, <i>path 
+  <li><a href="https://svn.boost.org/trac/boost/ticket/7607">#7607</a>, <i>path
   should not infer an invisible &quot;.&quot; at the end of a path that ends with a slash;
   </i><a href="https://svn.boost.org/trac/boost/ticket/7258">#7258</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/10766">#10766</a></li>
   <li><a href="https://svn.boost.org/trac/boost/ticket/11061">#11061</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/11062">#11062</a>, <i>
-  impossible to traverse the path of the reverse iterator</i>, is effectively 
-  resolved by the addition of the class <code>path</code> reverse iteration 
+  impossible to traverse the path of the reverse iterator</i>, is effectively
+  resolved by the addition of the class <code>path</code> reverse iteration
   feature. The reference documentation has also been updated with
-  <a href="reference.html#path-iterators">a note</a> warning about the 
+  <a href="reference.html#path-iterators">a note</a> warning about the
   limitations of class <code>path</code> iterators.</li>
 </ul>
 
 <ul>
   <li>Update the Tutorial:<ul>
     <li>Use C++11 in the example programs to improve clarity.</li>
-    <li>Update the example source code show to match the actual example source 
+    <li>Update the example source code show to match the actual example source
     code in the cpp files.</li>
-    <li>Rerun all the examples and update the output shown in the tutorial 
+    <li>Rerun all the examples and update the output shown in the tutorial
     accordingly.</li>
     <li>Fix spacing and other HTML presentation issues.</li>
   </ul>
 <ul>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
-  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a>. Cannot 
-  pass a BOOST_SCOPED_ENUM to a compiled function because it will result in an 
-  undefined reference if the library is compiled with -std=c++0x but the use is 
+  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a>. Cannot
+  pass a BOOST_SCOPED_ENUM to a compiled function because it will result in an
+  undefined reference if the library is compiled with -std=c++0x but the use is
   compiled in C++03 mode, or visa versa.</li>
   <li>Rewrite Windows implementation of <code>temp_directory_path()</code> to (1) avoid
-  <code>GetTempPath()</code> failure if path length &gt; 130 (ticket #5300) and (2) provide a 
-  more sensible sequence of directories than provided by <code>GetTempPath()</code>, per 
-  boost list discussion &quot;[filesystem] temp_directory_path() behavior on 
+  <code>GetTempPath()</code> failure if path length &gt; 130 (ticket #5300) and (2) provide a
+  more sensible sequence of directories than provided by <code>GetTempPath()</code>, per
+  boost list discussion &quot;[filesystem] temp_directory_path() behavior on
   Windows&quot;. The new sequence is:<ol>
     <li><i><code>%TMP%</code></i></li>
     <li><i><code>%TEMP%</code></i></li>
 
 <h2>1.57.0</h2>
 <ul>
-  <li>Rework class <code>path</code> locale and codecvt implementation for increased reliability. 
-  This change was SVN revision 83021, which should have gone into 1.56.0 but 
+  <li>Rework class <code>path</code> locale and codecvt implementation for increased reliability.
+  This change was SVN revision 83021, which should have gone into 1.56.0 but
   unfortunately the merge didn't happen until too late.</li>
   <li>Fix tickets <a href="https://svn.boost.org/trac/boost/ticket/8930">#8930</a>, <a href="https://svn.boost.org/trac/boost/ticket/9054">#9054</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/9214">#9219</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/10228">#10228</a>, and
-  <a href="https://svn.boost.org/trac/boost/ticket/10641">#10641</a>, all 
+  <a href="https://svn.boost.org/trac/boost/ticket/10641">#10641</a>, all
   related to locales and codecvt facets.</li>
-  <li>The net effect of the above changes and fixes should be to eliminate 
-  spurious &quot;locale::facet::_S_create_c_locale name not valid&quot; errors on Linux 
-  and other non-BSD POSIX-like systems. The error will continue to occur, as it 
-  should, when a path encoding conversion char-to-wchar_t or wchar_t-to-char is 
-  attempted in an environment without a valid C locale (for example, if the LANG 
+  <li>The net effect of the above changes and fixes should be to eliminate
+  spurious &quot;locale::facet::_S_create_c_locale name not valid&quot; errors on Linux
+  and other non-BSD POSIX-like systems. The error will continue to occur, as it
+  should, when a path encoding conversion char-to-wchar_t or wchar_t-to-char is
+  attempted in an environment without a valid C locale (for example, if the LANG
   environment variable is invalid or not defined).</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6124">#6124</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/6779">#6779</a>, and
-  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a> - an 
-  undefined reference that occurred when the library was compiled for C++03 but 
-  the using program was compiled for C++11, or vice versa. The private library 
-  interface has been changed to use a plain-old C++03 enum. This is the fix 
+  <a href="https://svn.boost.org/trac/boost/ticket/10038">#10038</a> - an
+  undefined reference that occurred when the library was compiled for C++03 but
+  the using program was compiled for C++11, or vice versa. The private library
+  interface has been changed to use a plain-old C++03 enum. This is the fix
   suggested by Andy in 6779.</li>
-  <li>The Windows implementation now treats NTFS directory junctions (also known 
-  as junctions, also known as mount points) as symlinks. This has the effect of 
-  treating directory junctions as directories, and thus supporting all 
+  <li>The Windows implementation now treats NTFS directory junctions (also known
+  as junctions, also known as mount points) as symlinks. This has the effect of
+  treating directory junctions as directories, and thus supporting all
   operations suitable for directories. This resolves
-  <a href="https://svn.boost.org/trac/boost/ticket/9016">#9016</a>. Directory 
-  junctions are very similar to symlinks, but may have performance or other 
-  advantages in some situations. They can be created from the command line with 
-  &quot;<code>mklink /j link target</code>&quot;. There is no plan for Boost.Filesystem to 
+  <a href="https://svn.boost.org/trac/boost/ticket/9016">#9016</a>. Directory
+  junctions are very similar to symlinks, but may have performance or other
+  advantages in some situations. They can be created from the command line with
+  &quot;<code>mklink /j link target</code>&quot;. There is no plan for Boost.Filesystem to
   be able to create them directly other than by calling <code>std::system()</code>.</li>
 </ul>
 
 <h2>1.56.0</h2>
 <ul>
-  <li>Reorganize <code>recursive_directory_iterator::increment</code>, adding an 
-  invariant that progress is always made, even if an error is reported by 
+  <li>Reorganize <code>recursive_directory_iterator::increment</code>, adding an
+  invariant that progress is always made, even if an error is reported by
   exception or error_code. Add a manually executed test, <code>
-  test/issues/recurse_dir_iter_5403.cpp</code>. Adjust regular regression tests 
+  test/issues/recurse_dir_iter_5403.cpp</code>. Adjust regular regression tests
   as needed. Thanks to Claudio Bley for the
-  <a href="https://github.com/boostorg/filesystem/pull/4">pull request</a> - the 
+  <a href="https://github.com/boostorg/filesystem/pull/4">pull request</a> - the
   change was incorporated into the reorganized code. Fixes
   <a href="https://svn.boost.org/trac/boost/ticket/5403">#5403</a> and
   <a href="https://svn.boost.org/trac/boost/ticket/6821">#6821</a>.</li>
-  <li>Fix <code>canonical()</code> to treat parent of root as root. (Christian 
-  Hammerl) Fixes <a href="https://svn.boost.org/trac/boost/ticket/9683">#9683</a> 
+  <li>Fix <code>canonical()</code> to treat parent of root as root. (Christian
+  Hammerl) Fixes <a href="https://svn.boost.org/trac/boost/ticket/9683">#9683</a>
   and <a href="https://svn.boost.org/trac/boost/ticket/10187">#10187</a>.</li>
-  <li>Added missing test for <code>__sun</code> macro which is defined on 
+  <li>Added missing test for <code>__sun</code> macro which is defined on
   Solaris 10. (Chris Stylianou)</li>
   <li>Minor fixes and code cleanup.</li>
   <li>Update IDE projects to Visual Studio 2013.</li>
-  <li>Remove unused <code>const char colon</code> to clear clang warning. (J?gen 
+  <li>Remove unused <code>const char colon</code> to clear clang warning. (J?gen
   Hunold)</li>
   <li>Add BOOST_NOEXCEPT to <code>class filesystem_error</code>.</li>
-  <li>Change <code>perms::all_all</code> and <code>perms::perms_mask</code> to 
+  <li>Change <code>perms::all_all</code> and <code>perms::perms_mask</code> to
   absolute values to quiet intellisense warnings, and conform to C++11.</li>
 </ul>
 
 <h2>1.54.0</h2>
 <ul>
-  <li>Reimplement <code>path::codecvt()</code> and <code>path::imbue()</code> 
-  with portable code that is intended to be much more robust and maintainable. A 
-  section on <a href="reference.html#path-Usage">path usage concerns</a> has 
-  been added to the reference documentation describing several concerns that 
+  <li>Reimplement <code>path::codecvt()</code> and <code>path::imbue()</code>
+  with portable code that is intended to be much more robust and maintainable. A
+  section on <a href="reference.html#path-Usage">path usage concerns</a> has
+  been added to the reference documentation describing several concerns that
   arise in the context of multithreading and <code>path::codecvt()</code>.</li>
 </ul>
 
 <h2>1.52.0</h2>
 <ul>
-  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/7239">#7239</a>, <i>Stack 
-  overflow when calling <code>create_directories(&quot;:D&quot;)</code></i>. The reported 
-  problem was a symptom of an internal bug that caused <code>path::filename()</code> 
-  and <code>path::parent_path()</code> to fail on Windows for <code>path(&quot;:&quot;)</code>, 
-  and that in turn caused other functions that depend on <code>filename()</code> 
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/7239">#7239</a>, <i>Stack
+  overflow when calling <code>create_directories(&quot;:D&quot;)</code></i>. The reported
+  problem was a symptom of an internal bug that caused <code>path::filename()</code>
+  and <code>path::parent_path()</code> to fail on Windows for <code>path(&quot;:&quot;)</code>,
+  and that in turn caused other functions that depend on <code>filename()</code>
   or <code>parent_path()</code> to fail, such as <code>create_directories()</code>.</li>
 </ul>
 
 <h2>1.51.0</h2>
 <ul>
-  <li>Add begin() and end() non-member functions for directory_iterator and 
-  recursive_directory_iterator so that C++11 range-based for statements  work. 
+  <li>Add begin() and end() non-member functions for directory_iterator and
+  recursive_directory_iterator so that C++11 range-based for statements  work.
   Suggested by feature requests
   <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> and
   <a href="https://svn.boost.org/trac/boost/ticket/6521">#6521</a>, using the
   <a href="https://svn.boost.org/trac/boost/ticket/5896">#5896</a> approach.</li>
-  <li>Add range_begin() and range_end() non-member functions for directory_iterator and 
-  recursive_directory_iterator so that 
+  <li>Add range_begin() and range_end() non-member functions for directory_iterator and
+  recursive_directory_iterator so that
   <a href="http://www.boost.org/libs/foreach/">BOOST_FOREACH</a> works.</li>
-  <li>Fix a Linux fchmodat problem affecting symlink permissions reported during 
+  <li>Fix a Linux fchmodat problem affecting symlink permissions reported during
   discussion of <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a>.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/6659">#6659</a> and
-  <a href="https://svn.boost.org/trac/boost/ticket/7051">#7051</a>, <i>fchmodat 
+  <a href="https://svn.boost.org/trac/boost/ticket/7051">#7051</a>, <i>fchmodat
   supported only on Solaris 11</i>. Fix for both Sun and GCC compilers. </li>
 </ul>
 
 <h2>1.50.0</h2>
 <ul>
-  <li>Remove Filesystem Version 2 from the distribution. Version 3 is now the 
-  only distributed version. Those still using V2 are urged to migrate to V3 as 
+  <li>Remove Filesystem Version 2 from the distribution. Version 3 is now the
+  only distributed version. Those still using V2 are urged to migrate to V3 as
   soon as possible.</li>
   <li>Add <code>constexpr value_type preferred_separator</code> to class path.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5118">#5118</a>, <i>
-  <code>replace_extension</code> doesn't work as specified in documentation</i>. The 
-  documentation, implementation, and test cases have all had fixes applied. The 
-  documentation had failed to mention that any existing extension is removed. 
-  The behavior for simple cases has been reverted to the Version 2 behavior, but 
-  with corrections so that complex replacements now work. Two test cases from 
+  <code>replace_extension</code> doesn't work as specified in documentation</i>. The
+  documentation, implementation, and test cases have all had fixes applied. The
+  documentation had failed to mention that any existing extension is removed.
+  The behavior for simple cases has been reverted to the Version 2 behavior, but
+  with corrections so that complex replacements now work. Two test cases from
   #5118 have been added.</li>
-  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/3737">#3737</a>, 
-  <i>Boost.Filesystem does not compile on Windows Mobile</i>. On Windows, &lt;sys/stat.h&gt; 
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/3737">#3737</a>,
+  <i>Boost.Filesystem does not compile on Windows Mobile</i>. On Windows, &lt;sys/stat.h&gt;
   is no longer included.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4065">#4065</a>, 
-  <i>Boost Filesystem lexicographic path comparison inconsistent</i>. This required 
-  multiple source code bug fixes and code cleanup, correcting problems not 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4065">#4065</a>,
+  <i>Boost Filesystem lexicographic path comparison inconsistent</i>. This required
+  multiple source code bug fixes and code cleanup, correcting problems not
   related to lexicographical issues.</li>
-  <li>Add class path member function <code>compare</code> for consistency with 
+  <li>Add class path member function <code>compare</code> for consistency with
   std::string.</li>
-  <li>Tighten BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK logic 
-  in filesystem/config.hpp so that one or the other is always defined, and both 
+  <li>Tighten BOOST_FILESYSTEM_DYN_LINK and BOOST_FILESYSTEM_STATIC_LINK logic
+  in filesystem/config.hpp so that one or the other is always defined, and both
   being defined is a #error.</li>
   <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6690">#6690</a> and
-  <a href="http://svn.boost.org/trac/boost/ticket/6737">#6737</a>, resolving 
-  static linking related problems with VC++ 8 through 11. Note that this fix may 
+  <a href="http://svn.boost.org/trac/boost/ticket/6737">#6737</a>, resolving
+  static linking related problems with VC++ 8 through 11. Note that this fix may
   reintroduce codecvt thread safety problems
   <a href="http://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
-  <a href="http://svn.boost.org/trac/boost/ticket/6320">#6320</a>, for these 
+  <a href="http://svn.boost.org/trac/boost/ticket/6320">#6320</a>, for these
   compilers if static linking is used.</li>
-  <li>Add path::operator+= and concat functions to tack on things like suffixes 
+  <li>Add path::operator+= and concat functions to tack on things like suffixes
   or numbers. Suggested by Ed Smith-Rowland and others.</li>
-  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6809">#6809</a>, 
-  <i>Implementation of filesystem::rename() method for MS Windows is wrong</i>, by 
-  adding MOVEFILE_COPY_ALLOWED to deal with renames across drives, volumes, file 
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6809">#6809</a>,
+  <i>Implementation of filesystem::rename() method for MS Windows is wrong</i>, by
+  adding MOVEFILE_COPY_ALLOWED to deal with renames across drives, volumes, file
   systems. Fix has no effect on non-Windows systems.</li>
-  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6819">#6819</a>, A path operand with a source that was a one character array was 
-  treated as empty, even if it wasn't empty. Such arrays can occur in unions or 
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6819">#6819</a>, A path operand with a source that was a one character array was
+  treated as empty, even if it wasn't empty. Such arrays can occur in unions or
   in code using C variable length array idioms.</li>
-  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6932">#6932</a>, 
+  <li>Fix <a href="http://svn.boost.org/trac/boost/ticket/6932">#6932</a>,
   <i>create_directories throws exception even if error_code is specified</i>.</li>
 </ul>
 
 <h2>1.49.0</h2>
 <ul>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>, 
-  Added test cases and fixes for class path errors when assignment or append 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/3714">#3714</a>,
+  Added test cases and fixes for class path errors when assignment or append
   used self or portion of self as source. </li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4889">#4889</a>, 
-  <a href="https://svn.boost.org/trac/boost/ticket/6320">#6320</a>, <i>Locale codecvt_facet not thread safe on Windows</i>. Move 
-  Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX 
-  except OS X uses local static initialization (IE lazy) to ensure exceptions 
-  are catchable if environmental variables are misconfigured and to avoid use of 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/4889">#4889</a>,
+  <a href="https://svn.boost.org/trac/boost/ticket/6320">#6320</a>, <i>Locale codecvt_facet not thread safe on Windows</i>. Move
+  Windows, Mac OS X, locale and codecvt facet back to namespace scope. POSIX
+  except OS X uses local static initialization (IE lazy) to ensure exceptions
+  are catchable if environmental variables are misconfigured and to avoid use of
   locale(&quot;&quot;) if not actually used.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5652">#5652</a>, 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5652">#5652</a>,
   <i>recursive_directory_iterator fails on cyclic symbolic links</i>. Thanks to Daniel Aarno for the patch.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5653">#5653</a>, 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5653">#5653</a>,
   <i>recursive_directory_iterator(error_code) can still throw filesystem_error</i>.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5900</a>, <i>directory_iterator 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5900</a>, <i>directory_iterator
   access violation on Windows if error is thrown</i>. Thanks to Andreas Eckleder for the patch.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900 
-  comment 2</a>, a bug in director_iterator construction with error_code argument that 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900#comment:2">#5900
+  comment 2</a>, a bug in director_iterator construction with error_code argument that
   caused increment to be called without the ec argument being passed.</li>
-  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5989</a> by cleaning up test suite path_test.cpp code even 
-  though the ticket itself was not a defect, and clarifying docs; iteration over a path yields 
+  <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5900">#5989</a> by cleaning up test suite path_test.cpp code even
+  though the ticket itself was not a defect, and clarifying docs; iteration over a path yields
   generic format.</li>
   <li>Fix <a href="https://svn.boost.org/trac/boost/ticket/5592">#5592</a>, <i>Change Windows codecvt processing from CP_THREAD_ACP to CP_ACP</i>.</li>
   <li>Operations function fixes for PGI compiler, thanks to Noel Belcourt.</li>
-  <li>Relax permissions test to reflect reality, particularly on the Sandia test 
+  <li>Relax permissions test to reflect reality, particularly on the Sandia test
   platforms.</li>
 </ul>
 
 <h2>1.48.0</h2>
 <ul>
-  <li>Added operational function <a href="reference.html#canonical">canonical()</a>, 
+  <li>Added operational function <a href="reference.html#canonical">canonical()</a>,
   suggested by David Svoboda, who also provided pseudo-code.</li>
-  <li>Added <a href="reference.html#hash_value">hash_value()</a> function for 
+  <li>Added <a href="reference.html#hash_value">hash_value()</a> function for
   paths. (Daniel James)</li>
-  <li>Fix path inserter problem (<a href="https://svn.boost.org/trac/boost/ticket/5764">#5764</a>) 
+  <li>Fix path inserter problem (<a href="https://svn.boost.org/trac/boost/ticket/5764">#5764</a>)
   reported for QNX6.3.2 host (gcc-3.3.5)</li>
-  <li>Fix problem of locale(&quot;&quot;) exception being thrown before main() starts on 
-  poorly configured (e.g. LANG=&quot;bad name&quot;) POSIX systems. Resolves the most 
+  <li>Fix problem of locale(&quot;&quot;) exception being thrown before main() starts on
+  poorly configured (e.g. LANG=&quot;bad name&quot;) POSIX systems. Resolves the most
   serious aspect of tickets
   <a href="https://svn.boost.org/trac/boost/ticket/4688">#4688</a>,
   <a href="https://svn.boost.org/trac/boost/ticket/5100">#5100</a>,
 
 <h2>1.47.0</h2>
 <ul>
-  <li>Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example. 
-  Useful both as an example and to explore how Boost.Filesystem treats various 
-  status errors.&nbsp; Run &quot;bjam&quot; (NOT &quot;bjam install&quot;) in the example directory 
+  <li>Program file_status.cpp added (V3). See boost-root/libs/filesystem/v3/example.
+  Useful both as an example and to explore how Boost.Filesystem treats various
+  status errors.&nbsp; Run &quot;bjam&quot; (NOT &quot;bjam install&quot;) in the example directory
   to install in example/bin.</li>
 </ul>
 
 <ul>
   <li>Version 3 of the library is now the default.</li>
   <li>IBM vacpp: Workaround for compiler bug affecting iterator_facade. (<a href="https://svn.boost.org/trac/boost/ticket/4912">#4912</a>)</li>
-  <li>Verify, clarify, document that &lt;boost/config/user.hpp&gt; can be used to 
+  <li>Verify, clarify, document that &lt;boost/config/user.hpp&gt; can be used to
   specify BOOST_FILESYSTEM_VERSION. (<a href="https://svn.boost.org/trac/boost/ticket/4891">#4891</a>)</li>
   <li>Replaced C-style assert with BOOST_ASSERT.</li>
-  <li>Undeprecated unique_path(). Instead, add a note mentioning the workaround 
-  for lack of thread safety and possible change to cwd. unique_path() is just 
+  <li>Undeprecated unique_path(). Instead, add a note mentioning the workaround
+  for lack of thread safety and possible change to cwd. unique_path() is just
   too convenient to deprecate!</li>
   <li>Cleared several GCC warnings.</li>
   <li>Changed V2 code to use BOOST_THROW_EXCEPTION.</li>
   <li>Windows: Fix status() to report non-symlink reparse point correctly.</li>
-  <li>Add <code>symlink_option</code> to <code>recursive_directory_iterator</code>, 
-  allowing control over recursion into directory symlinks. Note that the default 
+  <li>Add <code>symlink_option</code> to <code>recursive_directory_iterator</code>,
+  allowing control over recursion into directory symlinks. Note that the default
   is changed to not recurse into directory symlinks.</li>
-  <li><a href="reference.html">Reference</a> documentation cleanup, including 
+  <li><a href="reference.html">Reference</a> documentation cleanup, including
   fixing missing and broken links, and adding missing functions.</li>
   <li>Miscellaneous implementation code cleanup. </li>
 </ul>
 <p>Revised
 <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->07 August, 2017<!--webbot bot="Timestamp" endspan i-checksum="34770" --></p>
 <p>&copy; Copyright Beman Dawes, 2011</p>
-<p> Use, modification, and distribution are subject to the Boost Software 
+<p> Use, modification, and distribution are subject to the Boost Software
 License, Version 1.0. See <a href="http://www.boost.org/LICENSE_1_0.txt">
-www.boost.org/LICENSE_1_0.txt</a></p>
\ No newline at end of file
+www.boost.org/LICENSE_1_0.txt</a></p>
+</body>
+</html>