ports/math/givaro/files/patch-src_kernel_integer_random-integer.h
Dimitry Andric 238564b86a math/givaro: only declare std::bool_constant if it does not exist yet
While doing test builds for bug 284159 (math/linbox), I ran into an
issue compiling against one of the math/givaro headers, with clang and
libc++ 19:

  /usr/local/include/givaro/random-integer.h:40:14: error: reference to 'bool_constant' is ambiguous
     40 |         std::bool_constant<_Exact_Size>::type _Exact_Size_t;
        |              ^
  /usr/include/c++/v1/__type_traits/integral_constant.h:42:1: note: candidate found by name lookup is 'std::__1::bool_constant'
     42 | using bool_constant = integral_constant<bool, __b>;
        | ^
  /usr/local/include/givaro/random-integer.h:16:5: note: candidate found by name lookup is 'std::bool_constant'
     16 |     using bool_constant = integral_constant<bool, B>;
        |     ^

The problem is that random-integer.h attempts to declare
std::bool_constant, even though libc++ headers already have this
template.

Conditionalize it on __cpp_lib_bool_constant [1], so it is only declared
when necessary (i.e. if somebody compiles against and older C++
library).

[1] https://en.cppreference.com/w/cpp/feature_test#cpp_lib_bool_constant

PR:		284167
Approved by:	pi (maintainer)
MFH:		2025Q1
2025-01-19 19:09:20 +01:00

23 lines
581 B
C++

--- src/kernel/integer/random-integer.h.orig 2021-12-14 10:00:03 UTC
+++ src/kernel/integer/random-integer.h
@@ -11,10 +11,12 @@
#include "gmp++/gmp++.h"
+#if __cpp_lib_bool_constant < 201505L
namespace std {
template <bool B>
using bool_constant = integral_constant<bool, B>;
}
+#endif
namespace Givaro
{
@@ -91,7 +93,6 @@ namespace Givaro
if (this != &R) {
_bits = R._bits;
_integer = R._integer;
- const_cast<Integer_Domain&>(_ring)=R._ring;
}
return *this;
}