[PATCH] libstdc++: Merge picewise distributions configuration defines. [PR82749,PR125548]

Jonathan Wakely jwakely@redhat.com
Mon Sep 21 14:09:09 GMT 2026


On Wed, 09 Sep 2026 at 12:02 +0200, Tomasz Kamiński wrote:
>This patch introduces _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS that
>replaces a separate _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS (value 0)
>and _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES (value 2).
>
>This better reflects their behavior, as they were not orthogonal previously
>as defining _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES hand no effect
>if _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS was defined.
>
>libstdc++-v3/ChangeLog:
>
>	PR libstdc++/82749
>	PR libstdc++/125548
>	* doc/html/manual/status.html: Regenerate.
>	* doc/html/manual/using_macros.html: Regenrate.
>	* doc/xml/manual/using.xml
>	(_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS)
>	(_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES): Replace with...
>	(_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS): Add entry.
>	* include/bits/random.h (_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS):
>	Define to the value 1 if not already defined.
>	(__detail::__piecewise_distributions_storage)
>	(__detail::__piecewise_distributions_storage_t): Adjust to depend
>	on _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS value.
>	(piecewise_constant_distribution::_CalcType)
>	(piecewise_linear_distribution::_CalcType)
>	(piecewise_constant_distribution::param_type::densities)
>	(piecewise_linear_distribution::param_type::densities):
>	Check for non-zero value of _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>	instead of defintion of _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS and
>	reorder branches.
>	* include/bits/random.tcc
>	(piecewise_constant_distribution::param_type::param_type)
>	(piecewise_constant_distribution::param_type::param_type): Likewise.
>	* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc:
>	Replace checks for _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>	_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES defintions
>	with checks of _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS values.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc:
>	Replace -D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS with
>	-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc:
>	Likewise.
>	* testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc:
>	Replace -D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES with
>	-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2.
>	* testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc:
>	Likewise.
>---
>Is the #ifndef, #define to 1 for _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>OK? I never seen another version of that, but I think it make it easier
>to use.

Yes, that's OK. We usually do it in bits/c++config (e.g. see
_GLIBCXX_USE_DEPRECATED) and arguably, putting it in bits/c++config
makes the behaviour a bit more reliable, e.g.

#include <vector>
#define _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS 0
#include <random>

If the default value is set in bits/c++config then the Very Bad Code
above would not depend on whether <vector> happens to transitively
include <random> or not.

>Tested on x86_64-linux. *random* test additionally verified
>in all standard modes, -m32, assertions and debug.
>OK for trunk?
>
> libstdc++-v3/doc/html/manual/status.html      |  2 +-
> .../doc/html/manual/using_macros.html         | 35 ++++++------
> libstdc++-v3/doc/xml/manual/using.xml         | 38 ++++++-------
> libstdc++-v3/include/bits/random.h            | 56 ++++++++++---------
> libstdc++-v3/include/bits/random.tcc          | 18 +++---
> .../cons/input_type_fallback_neg.cc           |  2 +-
> .../operators/accessors.cc                    | 22 ++++----
> .../operators/accessors_exact.cc              |  2 +-
> .../operators/accessors_fallback.cc           |  2 +-
> .../cons/input_type_fallback_neg.cc           |  2 +-
> .../cons/pr125548.cc                          | 10 ++--
> .../cons/pr125548_fallback.cc                 |  2 +-
> .../operators/accessors.cc                    | 24 ++++----
> .../operators/accessors_exact.cc              |  2 +-
> .../operators/accessors_fallback.cc           |  2 +-
> 15 files changed, 112 insertions(+), 107 deletions(-)
>
>diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html
>index 5df1b8daac3..88ba3405de0 100644
>--- a/libstdc++-v3/doc/html/manual/status.html
>+++ b/libstdc++-v3/doc/html/manual/status.html
>@@ -1815,7 +1815,7 @@ since C++17 and the implementation is complete.
> 	<span class="emphasis"><em>25</em></span>
>       </td><td colspan="3" align="left">
> 	<span class="emphasis"><em>Algorithms library</em></span>
>-      </td></tr><tr><td align="left">25.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.2</td><td align="left">Algorithms requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Parallel algorithms</td><td align="left"> </td><td align="left">Uses code from <a class="link" href="https://uxlfoundation.github.io/oneDPL/parallel_api_main.html" target="_top">oneDPL</a></td></tr><tr><td align="left">25.4</td><td align="left">Header <code class="code"><algorithm></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.5</td><td align="left">Algorithm result types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6</td><td align="left">Non-modifying sequence operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.6.1</td><td align="left">All of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.2</td><td align="left">Any of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.3</td><td align="left">None of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.4</td><td align="left">For each</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.5</td><td align="left">Find</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.6</td><td align="left">Find end</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.7</td><td align="left">Find first</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.8</td><td align="left">Adjacent find</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.9</td><td align="left">Count</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.10</td><td align="left">Mismatch</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.11</td><td align="left">Equal</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.12</td><td align="left">Is permutation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.13</td><td align="left">Search</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7</td><td align="left">Mutating sequence operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.7.1</td><td align="left">Copy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.2</td><td align="left">Move</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.3</td><td align="left">Swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.4</td><td align="left">Transform</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.5</td><td align="left">Replace</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.6</td><td align="left">Fill</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.7</td><td align="left">Generate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.8</td><td align="left">Remove</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.9</td><td align="left">Unique</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.10</td><td align="left">Reverse</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.11</td><td align="left">Rotate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.12</td><td align="left">Sample</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.13</td><td align="left">Shuffle</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.14</td><td align="left">Shift</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8</td><td align="left">Sorting and related operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.8.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.2</td><td align="left">Sorting</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.3</td><td align="left">Nth element</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.4</td><td align="left">Binary search</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.5</td><td align="left">Partitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.6</td><td align="left">Merge</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.7</td><td align="left">Set operations on sorted structures</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.8</td><td align="left">Heap operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.9</td><td align="left">Minimum and maximum</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.10</td><td align="left">Bounded value</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.11</td><td align="left">Lexicographical comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.12</td><td align="left">Three-way comparison algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.13</td><td align="left">Permutation generators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.9</td><td align="left">Header <code class="code"><numeric></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.2</td><td align="left">Definitions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.3</td><td align="left">Accumulate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.4</td><td align="left">Reduce</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.5</td><td align="left">Inner product</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.6</td><td align="left">Transform reduce</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.7</td><td align="left">Partial sum</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.8</td><td align="left">Exclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.9</td><td align="left">Inclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.10</td><td align="left">Transform exclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.11</td><td align="left">Transform inclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.12</td><td align="left">Adjacent difference</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.13</td><td align="left">Iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.14</td><td align="left">Greatest common divisor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.15</td><td align="left">Least common multiple</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.16</td><td align="left">Midpoint</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11</td><td align="left">Specialized <code class="code"><memory></code> algorithms</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.11.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.11.2</td><td align="left">Special memory concepts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.3</td><td align="left"><code class="code">uninitialized_default_construct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.4</td><td align="left"><code class="code">uninitialized_value_construct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.5</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.6</td><td align="left"><code class="code">uninitialized_move</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.7</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.8</td><td align="left"><code class="code">construct_at</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.9</td><td align="left"><code class="code">destroy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.12</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
>+      </td></tr><tr><td align="left">25.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.2</td><td align="left">Algorithms requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.3</td><td align="left">Parallel algorithms</td><td align="left"> </td><td align="left">Uses code from <a class="link" href="https://uxlfoundation.github.io/oneDPL/specification/parallel_api.html" target="_top">oneDPL</a></td></tr><tr><td align="left">25.4</td><td align="left">Header <code class="code"><algorithm></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.5</td><td align="left">Algorithm result types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6</td><td align="left">Non-modifying sequence operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.6.1</td><td align="left">All of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.2</td><td align="left">Any of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.3</td><td align="left">None of</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.4</td><td align="left">For each</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.5</td><td align="left">Find</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.6</td><td align="left">Find end</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.7</td><td align="left">Find first</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.8</td><td align="left">Adjacent find</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.9</td><td align="left">Count</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.10</td><td align="left">Mismatch</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.11</td><td align="left">Equal</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.12</td><td align="left">Is permutation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.6.13</td><td align="left">Search</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7</td><td align="left">Mutating sequence operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.7.1</td><td align="left">Copy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.2</td><td align="left">Move</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.3</td><td align="left">Swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.4</td><td align="left">Transform</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.5</td><td align="left">Replace</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.6</td><td align="left">Fill</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.7</td><td align="left">Generate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.8</td><td align="left">Remove</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.9</td><td align="left">Unique</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.10</td><td align="left">Reverse</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.11</td><td align="left">Rotate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.12</td><td align="left">Sample</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.13</td><td align="left">Shuffle</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.7.14</td><td align="left">Shift</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8</td><td align="left">Sorting and related operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.8.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.2</td><td align="left">Sorting</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.3</td><td align="left">Nth element</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.4</td><td align="left">Binary search</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.5</td><td align="left">Partitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.6</td><td align="left">Merge</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.7</td><td align="left">Set operations on sorted structures</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.8</td><td align="left">Heap operations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.9</td><td align="left">Minimum and maximum</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.10</td><td align="left">Bounded value</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.11</td><td align="left">Lexicographical comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.12</td><td align="left">Three-way comparison algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.8.13</td><td align="left">Permutation generators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.9</td><td align="left">Header <code class="code"><numeric></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10</td><td align="left">Generalized numeric operations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.2</td><td align="left">Definitions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.10.3</td><td align="left">Accumulate</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.4</td><td align="left">Reduce</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.5</td><td align="left">Inner product</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.6</td><td align="left">Transform reduce</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.7</td><td align="left">Partial sum</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.8</td><td align="left">Exclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.9</td><td align="left">Inclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.10</td><td align="left">Transform exclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.11</td><td align="left">Transform inclusive scan</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.12</td><td align="left">Adjacent difference</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.13</td><td align="left">Iota</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.14</td><td align="left">Greatest common divisor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.15</td><td align="left">Least common multiple</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.10.16</td><td align="left">Midpoint</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11</td><td align="left">Specialized <code class="code"><memory></code> algorithms</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.11.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">25.11.2</td><td align="left">Special memory concepts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.3</td><td align="left"><code class="code">uninitialized_default_construct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.4</td><td align="left"><code class="code">uninitialized_value_construct</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.5</td><td align="left"><code class="code">uninitialized_copy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.6</td><td align="left"><code class="code">uninitialized_move</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.7</td><td align="left"><code class="code">uninitialized_fill</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.8</td><td align="left"><code class="code">construct_at</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.11.9</td><td align="left"><code class="code">destroy</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">25.12</td><td align="left">C library algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
> 	<span class="emphasis"><em>26</em></span>
>       </td><td colspan="3" align="left">
> 	<span class="emphasis"><em>Numerics library</em></span>
>diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
>index 6cb467471c8..600c7d0a6e5 100644
>--- a/libstdc++-v3/doc/html/manual/using_macros.html
>+++ b/libstdc++-v3/doc/html/manual/using_macros.html
>@@ -156,25 +156,26 @@
> 	<code class="option">-fexec-charset=UTF-8</code> so might give incorrect results
> 	if called from a source file that uses a non-Unicode encoding,
> 	especially for format strings using non-ASCII fill characters.
>-      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS</code></span></dt><dd><p>
>-	Undefined by default.
>-	When defined, the behavior of specializations of
>+      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS</code></span></dt><dd><p>
>+	Defined to the value <code class="literal">1</code>, if not provided.
>+	ABI-changing when defined to the value <code class="literal">2</code>.
>+
>+	When defined to non-zero value,
> 	<code class="code">piecewise_constant_distribution</code> and
>-	<code class="code">piecewise_linear_distribution</code>
>-	is restored to their state prior the implementation
>-	of <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749" target="_top">
>-	PR82749</a> (<a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#1439" target="_top">
>-	LWG1439</a>), <a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#4052" target="_top">
>+	<code class="code">piecewise_linear_distribution</code> incorporates corrections
>+	from <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749" target="_top">
>+	PR82749</a> (<a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#1439" target="_top">LWG1439</a>), <a class="link" href="https://cplusplus.github.io/LWG/lwg-defects.html#4052" target="_top">
> 	LWG4052</a>,	and <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125548" target="_top">
>-	PR125548</a>) in GCC 17.
>-      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES</code></span></dt><dd><p>
>-	Undefined by default. ABI-changing.
>-	When defined, specializations of
>-	<code class="code">piecewise_constant_distribution</code> and
>-	<code class="code">piecewise_linear_distribution</code> with a
>-	<code class="code">result_type</code> of either <code class="code">float</code> or
>-	<code class="code">long double</code> will manage their internal state using
>-	<code class="code">result_type</code> values (instead of <code class="code">double</code>).
>+	PR125548</a> in GCC 17.
>+      </p><p>
>+	When defined to the value <code class="literal">0</code>, the their behavior
>+	is restored to their state prior the implementation of above in GCC 17.
>+      </p><p>
>+	When defined to the value <code class="literal">2</code>, specializations of
>+	beforementioned distributions with a <code class="code">result_type</code> of
>+	either <code class="code">float</code> or <code class="code">long double</code> will manage
>+	their internal state using <code class="code">result_type</code> values (instead
>+	of <code class="code">double</code>).
> 	This is required for standard conformance, but is incompatible with
> 	the default implementation of those class templates.
>       </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html>
>\ No newline at end of file
>diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
>index da710be408f..20f0d8e2e82 100644
>--- a/libstdc++-v3/doc/xml/manual/using.xml
>+++ b/libstdc++-v3/doc/xml/manual/using.xml
>@@ -1379,35 +1379,35 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
> 	especially for format strings using non-ASCII fill characters.
>       </para>
>     </listitem></varlistentry>
>-    <varlistentry><term><code>_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS</code></term>
>+    <varlistentry><term><code>_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS</code></term>
>      <listitem>
>       <para>
>-	Undefined by default.
>-	When defined, the behavior of specializations of
>+	Defined to the value <literal>1</literal>, if not provided.
>+	ABI-changing when defined to the value <literal>2</literal>.
>+
>+	When defined to non-zero value,

"to a non-zero value"

> 	<code>piecewise_constant_distribution</code> and
>-	<code>piecewise_linear_distribution</code>
>-	is restored to their state prior the implementation
>-	of <link xmlns:xlink="http://www.w3.org/1999/xlink"
>+	<code>piecewise_linear_distribution</code> incorporates corrections
>+	from <link xmlns:xlink="http://www.w3.org/1999/xlink"
> 	xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82749">
> 	PR82749</link> (<link xmlns:xlink="http://www.w3.org/1999/xlink"
>-	xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#1439">
>-	LWG1439</link>), <link xmlns:xlink="http://www.w3.org/1999/xlink"
>+	xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#1439"
>+	>LWG1439</link>), <link xmlns:xlink="http://www.w3.org/1999/xlink"
> 	xlink:href="https://cplusplus.github.io/LWG/lwg-defects.html#4052">
> 	LWG4052</link>,	and <link xmlns:xlink="http://www.w3.org/1999/xlink"
> 	xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125548">
>-	PR125548</link>) in GCC 17.
>+	PR125548</link> in GCC 17.
>       </para>
>-    </listitem></varlistentry>
>-    <varlistentry><term><code>_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES</code></term>
>-    <listitem>
>       <para>
>-	Undefined by default. ABI-changing.
>-	When defined, specializations of
>-	<code>piecewise_constant_distribution</code> and
>-	<code>piecewise_linear_distribution</code> with a
>-	<code>result_type</code> of either <code>float</code> or
>-	<code>long double</code> will manage their internal state using
>-	<code>result_type</code> values (instead of <code>double</code>).
>+	When defined to the value <literal>0</literal>, the their behavior

"the their" -> "their"

>+	is restored to their state prior the implementation of above in GCC 17.

"prior to the changes in GCC 17" (I think this is simpler to
understand).

>+      </para>
>+      <para>
>+	When defined to the value <literal>2</literal>, specializations of
>+	beforementioned distributions with a <code>result_type</code> of
>+	either <code>float</code> or <code>long double</code> will manage
>+	their internal state using <code>result_type</code> values (instead
>+	of <code>double</code>).
> 	This is required for standard conformance, but is incompatible with
> 	the default implementation of those class templates.
>       </para>
>diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h
>index cfec087f0cd..fc049e1ad80 100644
>--- a/libstdc++-v3/include/bits/random.h
>+++ b/libstdc++-v3/include/bits/random.h
>@@ -6446,10 +6446,14 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
>
>   namespace __detail
>   {
>-#if defined(_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS)
>+#ifndef _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>+# define _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS 1
>+#endif
>+
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
>     template<typename _Tp>
>       using __piecewise_distributions_storage_t = double;
>-#elif defined(_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES)
>+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
>     template<typename _Tp>
>       using __piecewise_distributions_storage_t = _Tp;
> #else
>@@ -6505,10 +6509,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
>
>       using _StorageType
> 	= __detail::__piecewise_distributions_storage_t<_RealType>;
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-      using _CalcType = double;
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>       using _CalcType = _RealType;
>+#else
>+      using _CalcType = double;
> #endif
>
>     public:
>@@ -6554,11 +6558,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
> 	    return _M_int;
> 	}
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-	std::vector<double>
>-	densities() const
>-	{ return _M_den.empty() ? std::vector<double>(1, 1.0) : _M_den; }
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
> 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
> 	// 1439. Return from densities() functions?
> 	[[__gnu__::__abi_tag__("__rt")]]
>@@ -6575,6 +6575,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
> 	    return std::vector<_RealType>(_M_den.begin(), _M_den.end());
> #pragma GCC diagnostic pop
> 	}
>+#else
>+	std::vector<double>
>+	densities() const
>+	{ return _M_den.empty() ? std::vector<double>(1, 1.0) : _M_den; }
> #endif
>
> 	friend bool
>@@ -6650,13 +6654,13 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
>       /**
>        * @brief Returns a vector of the probability densities.
>        */
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-      std::vector<double>
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>+      [[__gnu__::__always_inline__]]
>+      std::vector<result_type>
>       densities() const
>       { return _M_param.densities(); }
> #else
>-      [[__gnu__::__always_inline__]]
>-      std::vector<result_type>
>+      std::vector<double>
>       densities() const
>       { return _M_param.densities(); }
> #endif
>@@ -6820,10 +6824,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
>
>       using _StorageType
> 	= __detail::__piecewise_distributions_storage_t<_RealType>;
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-      using _CalcType = double;
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>       using _CalcType = _RealType;
>+#else
>+      using _CalcType = double;
> #endif
>
>     public:
>@@ -6869,11 +6873,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
> 	    return _M_int;
> 	}
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-	std::vector<double>
>-	densities() const
>-	{ return _M_den.empty() ? std::vector<double>(2, 1.0) : _M_den; }
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
> 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
> 	// 1439. Return from densities() functions?
> 	[[__gnu__::__abi_tag__("__rt")]]
>@@ -6890,6 +6890,10 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
> 	    return std::vector<_RealType>(_M_den.begin(), _M_den.end());
> #pragma GCC diagnostic pop
> 	}
>+#else
>+	std::vector<double>
>+	densities() const
>+	{ return _M_den.empty() ? std::vector<double>(2, 1.0) : _M_den; }
> #endif
>
> 	friend bool
>@@ -6967,13 +6971,13 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
>        * @brief Return a vector of the probability densities of the
>        *        distribution.
>        */
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-      std::vector<double>
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>+      [[__gnu__::__always_inline__]]
>+      std::vector<result_type>
>       densities() const
>       { return _M_param.densities(); }
> #else
>-      [[__gnu__::__always_inline__]]
>-      std::vector<result_type>
>+      std::vector<double>
>       densities() const
>       { return _M_param.densities(); }
> #endif
>diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
>index b2b18e66f5f..ab4bb09dc3d 100644
>--- a/libstdc++-v3/include/bits/random.tcc
>+++ b/libstdc++-v3/include/bits/random.tcc
>@@ -3065,10 +3065,10 @@ namespace __detail
> 	// 4052. Bogus requirements for piecewise_linear_distribution
> 	auto __cfw = [&__fw](_RealType __n, _RealType __p)
> 	{
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-	  return __fw(0.5 * (__n + __p));
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
> 	  return _RealType(__fw(_RealType(0.5) * (__n + __p)));
>+#else
>+	  return __fw(0.5 * (__n + __p));
> #endif
> 	};
>
>@@ -3098,10 +3098,10 @@ namespace __detail
> 	const _RealType __delta = (__xmax - __xmin) / __n;
> 	auto __cfw = [&__fw, __delta](_RealType __v)
> 	{
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-	  return __fw(__v + 0.5 * __delta);
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
> 	  return _RealType(__fw(__v + _RealType(0.5) * __delta));
>+#else
>+	  return __fw(__v + 0.5 * __delta);
> #endif
> 	};
>
>@@ -3380,12 +3380,12 @@ namespace __detail
> 	const _RealType __delta = (__xmax - __xmin) / __n;
> 	const auto __cfw = [&] (_RealType __v)
> 	{
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-	  return __fw(__v + __delta);
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
> 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
> 	  // 4052. Bogus requirements for piecewise_linear_distribution
> 	  return _RealType(__fw(__v));
>+#else
>+	  return __fw(__v + __delta);
> #endif
> 	};
>
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
>index 6fb04ef7655..3dfba49d7f9 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/cons/input_type_fallback_neg.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
> // { dg-do compile { target c++11 } }
> // { dg-require-cstdint "" }
>
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
>index b31b028dc27..f8034ef08a0 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors.cc
>@@ -19,10 +19,10 @@ test_exact()
>   VERIFY( interval[0] == RealType(0.0) );
>   VERIFY( interval[5] == RealType(5.0) );
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-  const std::vector<double>& density = u.densities();
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>   const std::vector<RealType>& density = u.densities();
>+#else
>+  const std::vector<double>& density = u.densities();
> #endif
>
>   VERIFY( density.size() == 5 );
>@@ -38,9 +38,9 @@ void
> test_precision_depended()
> {
>   constexpr bool preserved
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
>     = sizeof(InputType) <= sizeof(double);
>-#elifdef _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES
>+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
>     = sizeof(InputType) <= sizeof(DistType);
> #else
>     // input is converted to DistType and stored in double
>@@ -61,10 +61,10 @@ test_precision_depended()
>     VERIFY( interval[0] == DistType(0.0) );
>     VERIFY( interval[2] == DistType(1.0) );
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-    const std::vector<double>& density = dist.densities();
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>     const std::vector<DistType>& density = dist.densities();
>+#else
>+    const std::vector<double>& density = dist.densities();
> #endif
>
>     VERIFY( density.size() == 2 );
>@@ -91,10 +91,10 @@ test_engine_calls()
> {
>   constexpr std::size_t bits = __builtin_popcountg(URBG::max() - URBG::min());
>   constexpr std::size_t calls
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-    = (std::numeric_limits<double>::digits + bits - 1) / bits;
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>     = (std::numeric_limits<RealType>::digits + bits - 1) / bits;
>+#else
>+    = (std::numeric_limits<double>::digits + bits - 1) / bits;
> #endif
>
>   struct wrapper : URBG
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
>index 469ed3fac46..e8e00acab73 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_exact.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2" }
> // { dg-do run { target c++11 } }
> // { dg-require-cstdint "" }
> #include "accessors.cc"
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
>index 1f7269a879c..b803786368f 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_constant_distribution/operators/accessors_fallback.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
> // { dg-do run { target c++11 } }
> // { dg-require-cstdint "" }
> #include "accessors.cc"
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
>index 48ae22b87bb..4bc9ca2704e 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/input_type_fallback_neg.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
> // { dg-do compile { target c++11 } }
> // { dg-require-cstdint "" }
>
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
>index 2d7ae555eaa..469ce7916c1 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548.cc
>@@ -4,18 +4,18 @@
> #include <random>
> #include <testsuite_hooks.h>
>
>-void
>+void
> test_functor(int n)
> {
>   const double step = 1.0/n;
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-  double expected = step;
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>   double expected = 0.0;
>+#else
>+  double expected = step;
> #endif
>
>   auto check_val = [&] (double value) mutable {
>-    VERIFY( value == expected );
>+    VERIFY( value == expected );
>     expected += step;
>     return value;
>   };
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
>index 4b8e6658570..84cb8bad1ad 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/cons/pr125548_fallback.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
> // { dg-do run { target c++11 } }
> // { dg-require-cstdint "" }
> #include "pr125548.cc"
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
>index 5da22fc1011..d94155f0020 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors.cc
>@@ -19,10 +19,10 @@ test_exact()
>   VERIFY( interval[0] == RealType(0.0) );
>   VERIFY( interval[5] == RealType(5.0) );
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-  const std::vector<double>& density = u.densities();
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>   const std::vector<RealType>& density = u.densities();
>+#else
>+  const std::vector<double>& density = u.densities();
> #endif
>
>   VERIFY( density.size() == 6 );
>@@ -39,9 +39,9 @@ void
> test_precision_depended()
> {
>   constexpr bool preserved
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 0
>     = sizeof(InputType) <= sizeof(double);
>-#elifdef _GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES
>+#elif _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS == 2
>     = sizeof(InputType) <= sizeof(DistType);
> #else
>     // input is converted to DistType and stored in double
>@@ -62,10 +62,10 @@ test_precision_depended()
>     VERIFY( interval[0] == DistType(0.0) );
>     VERIFY( interval[2] == DistType(1.0) );
>
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-    const std::vector<double>& density = dist.densities();
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>     const std::vector<DistType>& density = dist.densities();
>+#else
>+    const std::vector<double>& density = dist.densities();
> #endif
>
>     VERIFY( density.size() == 3 );
>@@ -83,7 +83,7 @@ test_precision_depended()
>   Distribution from_init_list(x, wf);
>   validate(from_init_list);
>
>-#ifndef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>   // PR125548 leads to incorrect densities being used
>   Distribution from_count(2, InputType(0), InputType(1), wf);
>   validate(from_count);
>@@ -96,10 +96,10 @@ test_engine_calls()
> {
>   constexpr std::size_t bits = __builtin_popcountg(URBG::max() - URBG::min());
>   constexpr std::size_t calls
>-#ifdef _GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS
>-    = (std::numeric_limits<double>::digits + bits - 1) / bits;
>-#else
>+#if _GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS
>     = (std::numeric_limits<RealType>::digits + bits - 1) / bits;
>+#else
>+    = (std::numeric_limits<double>::digits + bits - 1) / bits;
> #endif
>
>   struct wrapper : URBG
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
>index 469ed3fac46..e8e00acab73 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_exact.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_RESULT_TYPE_FOR_PIECEWISE_DENSITIES" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=2" }
> // { dg-do run { target c++11 } }
> // { dg-require-cstdint "" }
> #include "accessors.cc"
>diff --git a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
>index 1f7269a879c..b803786368f 100644
>--- a/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
>+++ b/libstdc++-v3/testsuite/26_numerics/random/piecewise_linear_distribution/operators/accessors_fallback.cc
>@@ -1,4 +1,4 @@
>-// { dg-options "-D_GLIBCXX_USE_OLD_PIECEWISE_DISTRIBUTIONS" }
>+// { dg-options "-D_GLIBCXX_USE_NEW_PIECEWISE_DISTRIBUTIONS=0" }
> // { dg-do run { target c++11 } }
> // { dg-require-cstdint "" }
> #include "accessors.cc"
>-- 
>2.55.0
>
>



More information about the Libstdc++ mailing list