commit a77a46d9aeb0166b4b1ee4b52e1cbb4b52c6736f Author: Jonathan Wakely Date: Tue Aug 3 15:03:44 2021 libstdc++: Suppress redundant definitions of inline variables In C++17 the out-of-class definitions for static constexpr variables are redundant, because they are implicitly inline. This change avoids "redundant redeclaration" warnings from -Wsystem-headers -Wdeprecated. Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/bits/random.tcc (linear_congruential_engine): Do not define static constexpr members when they are implicitly inline. * include/std/ratio (ratio, __ratio_multiply, __ratio_divide) (__ratio_add, __ratio_subtract): Likewise. * include/std/type_traits (integral_constant): Likewise. * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error line number. diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index 6ba263072b0..0be50d90e8a 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -91,6 +91,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } // namespace __detail /// @endcond +#if ! __cpp_inline_variables template constexpr _UIntType linear_congruential_engine<_UIntType, __a, __c, __m>::multiplier; @@ -106,6 +107,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template constexpr _UIntType linear_congruential_engine<_UIntType, __a, __c, __m>::default_seed; +#endif /** * Seeds the LCR with integral value @p __s, adjusted so that the diff --git a/libstdc++-v3/include/std/ratio b/libstdc++-v3/include/std/ratio index ceee7d00c12..92f6d4b9ea1 100644 --- a/libstdc++-v3/include/std/ratio +++ b/libstdc++-v3/include/std/ratio @@ -279,11 +279,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef ratio type; }; +#if ! __cpp_inline_variables template constexpr intmax_t ratio<_Num, _Den>::num; template constexpr intmax_t ratio<_Num, _Den>::den; +#endif /// @cond undocumented @@ -307,11 +309,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr intmax_t den = type::den; }; +#if ! __cpp_inline_variables template constexpr intmax_t __ratio_multiply<_R1, _R2>::num; template constexpr intmax_t __ratio_multiply<_R1, _R2>::den; +#endif /// @endcond @@ -334,11 +338,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr intmax_t den = type::den; }; +#if ! __cpp_inline_variables template constexpr intmax_t __ratio_divide<_R1, _R2>::num; template constexpr intmax_t __ratio_divide<_R1, _R2>::den; +#endif /// @endcond @@ -512,11 +518,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr intmax_t den = type::den; }; +#if ! __cpp_inline_variables template constexpr intmax_t __ratio_add<_R1, _R2>::num; template constexpr intmax_t __ratio_add<_R1, _R2>::den; +#endif /// @endcond @@ -537,11 +545,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static constexpr intmax_t den = type::den; }; +#if ! __cpp_inline_variables template constexpr intmax_t __ratio_subtract<_R1, _R2>::num; template constexpr intmax_t __ratio_subtract<_R1, _R2>::den; +#endif /// @endcond diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 0d821f9c074..46edde905f8 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -73,8 +73,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif }; +#if ! __cpp_inline_variables template constexpr _Tp integral_constant<_Tp, __v>::value; +#endif /// The type used as a compile-time boolean with true value. using true_type = integral_constant; diff --git a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc index d6e6399bd79..8fba7144d8a 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/pr60037-neg.cc @@ -12,4 +12,4 @@ auto x = std::generate_canonical