From a04b101bedfcbe25d9e547a04cf71a102e90b6eb Mon Sep 17 00:00:00 2001 From: pleroy Date: Sun, 5 May 2024 15:28:19 +0200 Subject: [PATCH] Fix compilation errors. --- boost_multiprecision.props | 1 + functions/functions.vcxproj | 5 -- .../polynomial_in_monomial_basis_body.hpp | 2 +- quantities/concepts.hpp | 46 ++++++++++--------- quantities/elementary_functions.hpp | 2 +- quantities/elementary_functions_body.hpp | 1 - quantities/generators_body.hpp | 2 +- quantities/quantities.hpp | 2 +- 8 files changed, 29 insertions(+), 32 deletions(-) diff --git a/boost_multiprecision.props b/boost_multiprecision.props index cc3a72c69c..99870093f6 100644 --- a/boost_multiprecision.props +++ b/boost_multiprecision.props @@ -6,6 +6,7 @@ $(SolutionDir)..\Boost\multiprecision\include;%(AdditionalIncludeDirectories) + BOOST_MP_STANDALONE;%(PreprocessorDefinitions) diff --git a/functions/functions.vcxproj b/functions/functions.vcxproj index 760525bf4f..766d73c873 100644 --- a/functions/functions.vcxproj +++ b/functions/functions.vcxproj @@ -4,11 +4,6 @@ {7cca653c-2e8f-4ffd-9e9f-bee590f3efab} functions - - - BOOST_MP_STANDALONE;%(PreprocessorDefinitions) - - diff --git a/numerics/polynomial_in_monomial_basis_body.hpp b/numerics/polynomial_in_monomial_basis_body.hpp index 57624f058f..7403488ad8 100644 --- a/numerics/polynomial_in_monomial_basis_body.hpp +++ b/numerics/polynomial_in_monomial_basis_body.hpp @@ -12,7 +12,7 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_join.h" #include "base/not_constructible.hpp" -#include "boost/multiprecision/fwd.hpp" +#include "boost/multiprecision/number.hpp" #include "geometry/cartesian_product.hpp" #include "geometry/serialization.hpp" #include "numerics/combinatorics.hpp" diff --git a/quantities/concepts.hpp b/quantities/concepts.hpp index 580487434b..6b7721fabb 100644 --- a/quantities/concepts.hpp +++ b/quantities/concepts.hpp @@ -15,6 +15,8 @@ using namespace base::_traits; using namespace quantities::_quantities; // TODO(egg): additive_group should subsume affine, but we use it there. +// We use |convertible_to| here because we want this concept to work with +// Boost multiprecision types which heavily use implicit conversions. template concept additive_group = requires(G x, G y, int n) { G{}; @@ -34,10 +36,10 @@ concept additive_group = requires(G x, G y, int n) { template concept affine = requires(A x, A y) { { x - y } -> additive_group; - { y + (x - y) } -> std::convertible_to; - { y += (x - y) } -> std::convertible_to; - { y - (x - y) } -> std::convertible_to; - { y -= (x - y) } -> std::convertible_to; + { y + (x - y) } -> std::same_as; + { y += (x - y) } -> std::same_as; + { y - (x - y) } -> std::same_as; + { y -= (x - y) } -> std::same_as; }; // A graded ring restricted to its homogeneous elements; multiplication can @@ -48,13 +50,13 @@ concept homogeneous_ring = // Really, multiplication should return a homogeneous_ring. { x * y } -> additive_group; { (x * y) * z } -> additive_group; - { (x * y) * z } -> std::convertible_to; + { (x * y) * z } -> std::same_as; }; template concept ring = homogeneous_ring && requires(A x, A y) { - { x * y } -> std::convertible_to; - { x *= y } -> std::convertible_to; + { x * y } -> std::same_as; + { x *= y } -> std::same_as; }; // TODO(egg): field should subsume homogeneous_field, but we use it in @@ -63,9 +65,9 @@ concept ring = homogeneous_ring && requires(A x, A y) { template concept field = ring && !std::integral && requires(K x, K y, K z) { { 1 } -> std::convertible_to; - { 1 / y } -> std::convertible_to; - { x / y } -> std::convertible_to; - { x /= y } -> std::convertible_to; + { 1 / y } -> std::same_as; + { x / y } -> std::same_as; + { x /= y } -> std::same_as; }; // TODO(egg): vector_space should subsume homogeneous_vector_space, but we use @@ -73,11 +75,11 @@ concept field = ring && !std::integral && requires(K x, K y, K z) { template concept vector_space = field && requires(K λ, V v) { - { λ * v } -> std::convertible_to; - { v * λ } -> std::convertible_to; - { v / λ } -> std::convertible_to; - { v *= λ } -> std::convertible_to; - { v /= λ } -> std::convertible_to; + { λ * v } -> std::same_as; + { v * λ } -> std::same_as; + { v / λ } -> std::same_as; + { v *= λ } -> std::same_as; + { v /= λ } -> std::same_as; }; // A graded field restricted to its homogeneous elements; multiplication and @@ -88,9 +90,9 @@ concept homogeneous_field = homogeneous_ring && requires(K x, K y, K z) { { x / y } -> field; requires vector_space; { (1 / x) } -> homogeneous_ring; - { 1 / (x * y) } -> std::convertible_to; - { (x * y) / z } -> std::convertible_to; - { (x / y) * z } -> std::convertible_to; + { 1 / (x * y) } -> std::same_as; + { (x * y) / z } -> std::same_as; + { (x / y) * z } -> std::same_as; }; template @@ -99,11 +101,11 @@ concept homogeneous_vector_space = // Really, these operations should return a homogeneous_vector_space. requires vector_space; { λ * v } -> additive_group; - { v * λ } -> std::convertible_to; + { v * λ } -> std::same_as; { v / λ } -> additive_group; - { λ * v / λ } -> std::convertible_to; + { λ * v / λ } -> std::same_as; { (λ * μ) * v } -> additive_group; - { λ * (μ * v) } -> std::convertible_to; + { λ * (μ * v) } -> std::same_as; }; template @@ -118,7 +120,7 @@ template concept real_affine_space = affine_space; template -concept quantity = instance || std::convertible_to; +concept quantity = instance || std::same_as; // std::integral || std::floating_point rather than // std::convertible_to because diff --git a/quantities/elementary_functions.hpp b/quantities/elementary_functions.hpp index 4e2d6b817d..0a09449bb6 100644 --- a/quantities/elementary_functions.hpp +++ b/quantities/elementary_functions.hpp @@ -2,7 +2,7 @@ #include -#include "boost/multiprecision/fwd.hpp" +#include "boost/multiprecision/number.hpp" #include "quantities/named_quantities.hpp" #include "quantities/quantities.hpp" diff --git a/quantities/elementary_functions_body.hpp b/quantities/elementary_functions_body.hpp index f1cd9ab58e..0da6aa541c 100644 --- a/quantities/elementary_functions_body.hpp +++ b/quantities/elementary_functions_body.hpp @@ -7,7 +7,6 @@ #include #include "boost/multiprecision/cpp_int.hpp" -#include "boost/multiprecision/fwd.hpp" #include "numerics/cbrt.hpp" #include "numerics/fma.hpp" #include "numerics/next.hpp" diff --git a/quantities/generators_body.hpp b/quantities/generators_body.hpp index edc77f07bd..1b214ee96a 100644 --- a/quantities/generators_body.hpp +++ b/quantities/generators_body.hpp @@ -5,7 +5,7 @@ #include #include "base/not_constructible.hpp" -#include "boost/multiprecision/fwd.hpp" +#include "boost/multiprecision/number.hpp" #include "quantities/dimensions.hpp" namespace principia { diff --git a/quantities/quantities.hpp b/quantities/quantities.hpp index f9380a86de..a1e46eecb4 100644 --- a/quantities/quantities.hpp +++ b/quantities/quantities.hpp @@ -12,7 +12,7 @@ #include "base/not_constructible.hpp" #include "base/not_null.hpp" #include "base/tags.hpp" -#include "boost/multiprecision/fwd.hpp" +#include "boost/multiprecision/number.hpp" #include "quantities/dimensions.hpp" #include "quantities/generators.hpp" #include "serialization/quantities.pb.h"