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 <jwakely@redhat.com> 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.
This commit is contained in:
parent
5c6759e416
commit
a77a46d9ae
@ -91,6 +91,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
} // namespace __detail
|
||||
/// @endcond
|
||||
|
||||
#if ! __cpp_inline_variables
|
||||
template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
|
||||
constexpr _UIntType
|
||||
linear_congruential_engine<_UIntType, __a, __c, __m>::multiplier;
|
||||
@ -106,6 +107,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m>
|
||||
constexpr _UIntType
|
||||
linear_congruential_engine<_UIntType, __a, __c, __m>::default_seed;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Seeds the LCR with integral value @p __s, adjusted so that the
|
||||
|
@ -279,11 +279,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
typedef ratio<num, den> type;
|
||||
};
|
||||
|
||||
#if ! __cpp_inline_variables
|
||||
template<intmax_t _Num, intmax_t _Den>
|
||||
constexpr intmax_t ratio<_Num, _Den>::num;
|
||||
|
||||
template<intmax_t _Num, intmax_t _Den>
|
||||
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<typename _R1, typename _R2>
|
||||
constexpr intmax_t __ratio_multiply<_R1, _R2>::num;
|
||||
|
||||
template<typename _R1, typename _R2>
|
||||
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<typename _R1, typename _R2>
|
||||
constexpr intmax_t __ratio_divide<_R1, _R2>::num;
|
||||
|
||||
template<typename _R1, typename _R2>
|
||||
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<typename _R1, typename _R2>
|
||||
constexpr intmax_t __ratio_add<_R1, _R2>::num;
|
||||
|
||||
template<typename _R1, typename _R2>
|
||||
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<typename _R1, typename _R2>
|
||||
constexpr intmax_t __ratio_subtract<_R1, _R2>::num;
|
||||
|
||||
template<typename _R1, typename _R2>
|
||||
constexpr intmax_t __ratio_subtract<_R1, _R2>::den;
|
||||
#endif
|
||||
|
||||
/// @endcond
|
||||
|
||||
|
@ -73,8 +73,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
#endif
|
||||
};
|
||||
|
||||
#if ! __cpp_inline_variables
|
||||
template<typename _Tp, _Tp __v>
|
||||
constexpr _Tp integral_constant<_Tp, __v>::value;
|
||||
#endif
|
||||
|
||||
/// The type used as a compile-time boolean with true value.
|
||||
using true_type = integral_constant<bool, true>;
|
||||
|
@ -12,4 +12,4 @@ auto x = std::generate_canonical<std::size_t,
|
||||
|
||||
// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 169 }
|
||||
|
||||
// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3350 }
|
||||
// { dg-error "static assertion failed: template argument must be a floating point type" "" { target *-*-* } 3352 }
|
||||
|
Loading…
Reference in New Issue
Block a user