From 1d62b6274e264b442704a965d91101458201afa4 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 10 Apr 2025 15:57:43 +0200
Subject: [PATCH] COMP: add <numeric> to stdFoam.H

- useful to have std::reduce(), std::transform_reduce() available in
  more places, so treat like <algorithm> and include in "stdFoam.H"

STYLE: add 'stricter' detection markers for cast of SubList to List etc.

STYLE: remove 'const' qualifier from Foam:one/Foam::zero (in Field)
---
 applications/test/FixedList/Make/files               |  2 +-
 .../{Test-FixedList.C => Test-FixedList.cxx}         |  1 -
 applications/test/List/Test-List.cxx                 |  1 -
 applications/test/ListRead1/Make/files               |  2 +-
 applications/test/ListRead1/Test-ListRead1.C         |  1 -
 applications/test/SubField/Make/files                |  2 +-
 .../SubField/{Test-SubField.C => Test-SubField.cxx}  |  1 -
 applications/test/charList/Make/files                |  2 +-
 .../charList/{Test-charList.C => Test-charList.cxx}  |  2 --
 applications/test/checkIOspeed/Test-checkIOspeed.cxx |  2 --
 .../mesh/manipulation/stitchMesh/stitchMesh.C        |  1 -
 src/OpenFOAM/containers/Lists/List/SubList.H         |  6 +++++-
 src/OpenFOAM/containers/Lists/List/SubListI.H        |  7 -------
 src/OpenFOAM/containers/Lists/List/UList.H           |  2 +-
 src/OpenFOAM/expressions/value/exprValue.H           |  2 +-
 src/OpenFOAM/expressions/value/exprValueFieldTag.H   |  2 +-
 .../DimensionedField/DimensionedFieldFunctions.C     |  6 +++---
 .../DimensionedField/DimensionedFieldFunctions.H     |  6 +++---
 .../fields/FieldFields/FieldField/FieldField.C       |  2 +-
 .../fields/FieldFields/FieldField/FieldField.H       |  2 +-
 src/OpenFOAM/fields/Fields/Field/Field.H             | 12 ++++++------
 src/OpenFOAM/fields/Fields/Field/FieldI.H            | 12 +++++-------
 src/OpenFOAM/fields/Fields/Field/SubField.H          | 10 ++++++++--
 src/OpenFOAM/fields/Fields/Field/SubFieldI.H         |  9 +--------
 .../GeometricField/GeometricFieldFunctions.C         |  6 +++---
 .../GeometricField/GeometricFieldFunctions.H         |  6 +++---
 src/OpenFOAM/include/stdFoam.H                       |  3 ++-
 .../matrices/DiagonalMatrix/DiagonalMatrix.H         |  1 -
 src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H    |  1 -
 .../lduMatrix/solvers/GAMG/GAMGSolverSolve.C         | 11 +++++------
 src/OpenFOAM/meshes/boundBox/boundBox.H              |  4 ++--
 src/OpenFOAM/meshes/boundBox/boundBoxI.H             |  4 ++--
 src/OpenFOAM/meshes/ijkMesh/IjkField.H               |  4 ++--
 src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H              |  6 +++---
 .../meshes/polyMesh/syncTools/syncToolsTemplates.C   |  8 ++++++--
 src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H      |  2 +-
 src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H     |  4 ++--
 src/OpenFOAM/primitives/Scalar/scalarImpl.H          |  2 +-
 src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H    |  2 +-
 src/conversion/vtk/adaptor/foamVtkToolsI.H           |  2 --
 src/fileFormats/ensight/part/faces/ensightFaces.C    | 10 +++++-----
 41 files changed, 78 insertions(+), 93 deletions(-)
 rename applications/test/FixedList/{Test-FixedList.C => Test-FixedList.cxx} (99%)
 rename applications/test/SubField/{Test-SubField.C => Test-SubField.cxx} (99%)
 rename applications/test/charList/{Test-charList.C => Test-charList.cxx} (99%)

diff --git a/applications/test/FixedList/Make/files b/applications/test/FixedList/Make/files
index dcfee8af133..cd58141078e 100644
--- a/applications/test/FixedList/Make/files
+++ b/applications/test/FixedList/Make/files
@@ -1,3 +1,3 @@
-Test-FixedList.C
+Test-FixedList.cxx
 
 EXE = $(FOAM_USER_APPBIN)/Test-FixedList
diff --git a/applications/test/FixedList/Test-FixedList.C b/applications/test/FixedList/Test-FixedList.cxx
similarity index 99%
rename from applications/test/FixedList/Test-FixedList.C
rename to applications/test/FixedList/Test-FixedList.cxx
index e77190a7939..5f8a1034417 100644
--- a/applications/test/FixedList/Test-FixedList.C
+++ b/applications/test/FixedList/Test-FixedList.cxx
@@ -41,7 +41,6 @@ See also
 #include "List.H"
 #include "IPstream.H"
 #include "OPstream.H"
-#include <numeric>
 
 using namespace Foam;
 
diff --git a/applications/test/List/Test-List.cxx b/applications/test/List/Test-List.cxx
index 96571f642cb..0962997830c 100644
--- a/applications/test/List/Test-List.cxx
+++ b/applications/test/List/Test-List.cxx
@@ -54,7 +54,6 @@ See also
 #include "ListPolicy.H"
 
 #include <list>
-#include <numeric>
 #include <functional>
 
 // see issue #2083
diff --git a/applications/test/ListRead1/Make/files b/applications/test/ListRead1/Make/files
index da3cc22d196..8631d227f0e 100644
--- a/applications/test/ListRead1/Make/files
+++ b/applications/test/ListRead1/Make/files
@@ -1,3 +1,3 @@
-Test-ListRead1.C
+Test-ListRead1.cxx
 
 EXE = $(FOAM_USER_APPBIN)/Test-ListRead1
diff --git a/applications/test/ListRead1/Test-ListRead1.C b/applications/test/ListRead1/Test-ListRead1.C
index d7417235b4e..aac211e2da6 100644
--- a/applications/test/ListRead1/Test-ListRead1.C
+++ b/applications/test/ListRead1/Test-ListRead1.C
@@ -50,7 +50,6 @@ Description
 #include "ListPolicy.H"
 
 #include <list>
-#include <numeric>
 #include <functional>
 
 using namespace Foam;
diff --git a/applications/test/SubField/Make/files b/applications/test/SubField/Make/files
index 406ae415312..9e8f8ac4bbc 100644
--- a/applications/test/SubField/Make/files
+++ b/applications/test/SubField/Make/files
@@ -1,3 +1,3 @@
-Test-SubField.C
+Test-SubField.cxx
 
 EXE = $(FOAM_USER_APPBIN)/Test-SubField
diff --git a/applications/test/SubField/Test-SubField.C b/applications/test/SubField/Test-SubField.cxx
similarity index 99%
rename from applications/test/SubField/Test-SubField.C
rename to applications/test/SubField/Test-SubField.cxx
index bed02ecacb5..17a41f14f38 100644
--- a/applications/test/SubField/Test-SubField.C
+++ b/applications/test/SubField/Test-SubField.cxx
@@ -38,7 +38,6 @@ Description
 #include "SubField.H"
 #include "labelRange.H"
 #include "ListOps.H"
-#include <numeric>
 
 using namespace Foam;
 
diff --git a/applications/test/charList/Make/files b/applications/test/charList/Make/files
index e7b5eba75bf..f3f0e233d57 100644
--- a/applications/test/charList/Make/files
+++ b/applications/test/charList/Make/files
@@ -1,3 +1,3 @@
-Test-charList.C
+Test-charList.cxx
 
 EXE = $(FOAM_USER_APPBIN)/Test-charList
diff --git a/applications/test/charList/Test-charList.C b/applications/test/charList/Test-charList.cxx
similarity index 99%
rename from applications/test/charList/Test-charList.C
rename to applications/test/charList/Test-charList.cxx
index 32e98110930..8a480a287b5 100644
--- a/applications/test/charList/Test-charList.C
+++ b/applications/test/charList/Test-charList.cxx
@@ -43,8 +43,6 @@ Description
 #include "SubList.H"
 #include "FlatOutput.H"
 
-#include <numeric>
-
 using namespace Foam;
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/test/checkIOspeed/Test-checkIOspeed.cxx b/applications/test/checkIOspeed/Test-checkIOspeed.cxx
index a92159dde3b..5db748b01c6 100644
--- a/applications/test/checkIOspeed/Test-checkIOspeed.cxx
+++ b/applications/test/checkIOspeed/Test-checkIOspeed.cxx
@@ -50,8 +50,6 @@ Description
 #include "SliceStreamRepo.H"
 #endif
 
-#include <numeric>
-
 using namespace Foam;
 
 
diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
index 8f0ea89dc24..b009297bde0 100644
--- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
+++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C
@@ -73,7 +73,6 @@ Description
 #include "perfectInterface.H"
 #include "IOobjectList.H"
 #include "ReadFields.H"
-#include <numeric>
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/containers/Lists/List/SubList.H b/src/OpenFOAM/containers/Lists/List/SubList.H
index 2cd0e10c18e..ba7d320c670 100644
--- a/src/OpenFOAM/containers/Lists/List/SubList.H
+++ b/src/OpenFOAM/containers/Lists/List/SubList.H
@@ -172,7 +172,11 @@ public:
     // Member Operators
 
         //- Allow cast to a const List\<T\>&
-        inline operator const Foam::List<T>&() const;
+        FOAM_DEPRECATED_STRICTER(2025-04, "dereference as SubList, not List?")
+        operator const Foam::List<T>&() const
+        {
+            return *reinterpret_cast<const List<T>*>(this);
+        }
 
         //- Copy assign entries (deep copy) from given sub-list.
         //- Sizes must match!
diff --git a/src/OpenFOAM/containers/Lists/List/SubListI.H b/src/OpenFOAM/containers/Lists/List/SubListI.H
index 1bec82958eb..567fa32f251 100644
--- a/src/OpenFOAM/containers/Lists/List/SubListI.H
+++ b/src/OpenFOAM/containers/Lists/List/SubListI.H
@@ -214,13 +214,6 @@ inline Foam::UList<T>& Foam::SubList<T>::reset
 
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
-template<class T>
-inline Foam::SubList<T>::operator const Foam::List<T>&() const
-{
-    return *reinterpret_cast<const List<T>*>(this);
-}
-
-
 template<class T>
 inline void Foam::SubList<T>::operator=(const SubList<T>& list)
 {
diff --git a/src/OpenFOAM/containers/Lists/List/UList.H b/src/OpenFOAM/containers/Lists/List/UList.H
index 2af60648ff3..0c54fe8a597 100644
--- a/src/OpenFOAM/containers/Lists/List/UList.H
+++ b/src/OpenFOAM/containers/Lists/List/UList.H
@@ -427,7 +427,7 @@ public:
         //- Allow cast to a const List<T>&.
         //  \note Marked as "strictly" deprecated.
         //  Currently (2025-04) code still depends on this cast.
-        FOAM_DEPRECATED_STRICTER(2025-04, "dereference as UList, not List")
+        FOAM_DEPRECATED_STRICTER(2025-04, "dereference as UList, not List?")
         operator const Foam::List<T>&() const
         {
             return *reinterpret_cast<const List<T>*>(this);
diff --git a/src/OpenFOAM/expressions/value/exprValue.H b/src/OpenFOAM/expressions/value/exprValue.H
index 97e057614dd..c65fcb93f16 100644
--- a/src/OpenFOAM/expressions/value/exprValue.H
+++ b/src/OpenFOAM/expressions/value/exprValue.H
@@ -308,7 +308,7 @@ public:
         void operator=(const exprValue& rhs) { deepCopy(rhs); }
 
         //- Assign from zero. Changes value but not type
-        void operator=(const Foam::zero) { fill_zero(); }
+        void operator=(Foam::zero) { fill_zero(); }
 
 
     // Low-level access
diff --git a/src/OpenFOAM/expressions/value/exprValueFieldTag.H b/src/OpenFOAM/expressions/value/exprValueFieldTag.H
index 07f8666e496..b1c3295c4a9 100644
--- a/src/OpenFOAM/expressions/value/exprValueFieldTag.H
+++ b/src/OpenFOAM/expressions/value/exprValueFieldTag.H
@@ -214,7 +214,7 @@ public:
     // Member Operators
 
         //- Assign from zero. Changes value but not type
-        void operator=(const Foam::zero) { value_ = Foam::zero{}; }
+        void operator=(Foam::zero) { value_ = Foam::zero{}; }
 
         //- Compare (uniformity,value) for equality
         bool operator==(const exprValueFieldTag&) const;
diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C
index 362c5a355e6..6328e7c0625 100644
--- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C
+++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.C
@@ -331,7 +331,7 @@ void clamp
 (
     DimensionedField<Type, GeoMesh>& result,
     const DimensionedField<Type, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     const MinMax<Type> range(Foam::zero_one{});
@@ -345,7 +345,7 @@ tmp<DimensionedField<Type, GeoMesh>>
 clamp
 (
     const DimensionedField<Type, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     auto tres =
@@ -367,7 +367,7 @@ tmp<DimensionedField<Type, GeoMesh>>
 clamp
 (
     const tmp<DimensionedField<Type, GeoMesh>>& tf1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     const auto& f1 = tf1();
diff --git a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H
index 32ce17fcf04..b6ad90506ca 100644
--- a/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H
+++ b/src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldFunctions.H
@@ -149,7 +149,7 @@ void clamp
 (
     DimensionedField<Type, GeoMesh>& result,
     const DimensionedField<Type, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 template<class Type, class GeoMesh>
@@ -157,7 +157,7 @@ tmp<DimensionedField<Type, GeoMesh>>
 clamp
 (
     const DimensionedField<Type, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 template<class Type, class GeoMesh>
@@ -165,7 +165,7 @@ tmp<DimensionedField<Type, GeoMesh>>
 clamp
 (
     const tmp<DimensionedField<Type, GeoMesh>>& tf1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 BINARY_TYPE_FUNCTION_FS(Type, Type, MinMax<Type>, clamp)
diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C
index 1cd6a54c6b2..7b21f1d7ea5 100644
--- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C
+++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.C
@@ -458,7 +458,7 @@ void FieldField<Field, Type>::operator=(const Type& val)
 
 
 template<template<class> class Field, class Type>
-void FieldField<Field, Type>::operator=(const Foam::zero)
+void FieldField<Field, Type>::operator=(Foam::zero)
 {
     forAll(*this, i)
     {
diff --git a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H
index f1c9fda937f..6924b0b32bc 100644
--- a/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H
+++ b/src/OpenFOAM/fields/FieldFields/FieldField/FieldField.H
@@ -197,7 +197,7 @@ public:
         void operator=(const Type& val);
 
         //- Assign uniform zero
-        void operator=(const Foam::zero);
+        void operator=(Foam::zero);
 
         void operator+=(const FieldField<Field, Type>&);
         void operator+=(const tmp<FieldField<Field, Type>>&);
diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H
index 3441a50e0b5..c49292a0663 100644
--- a/src/OpenFOAM/fields/Fields/Field/Field.H
+++ b/src/OpenFOAM/fields/Fields/Field/Field.H
@@ -145,16 +145,16 @@ public:
         inline Field(const label len, const Type& val);
 
         //- Construct given size and initial values of zero
-        inline Field(const label len, const Foam::zero);
+        inline Field(const label len, Foam::zero);
 
         //- Construct with length=1, copying the value as the only content
-        inline Field(const Foam::one, const Type& val);
+        inline Field(Foam::one, const Type& val);
 
         //- Construct with length=1, moving the value as the only content
-        inline Field(const Foam::one, Type&& val);
+        inline Field(Foam::one, Type&& val);
 
         //- Construct with length=1, initializing content to zero
-        inline Field(const Foam::one, const Foam::zero);
+        inline Field(Foam::one, Foam::zero);
 
         //- Copy construct
         inline Field(const Field<Type>& fld);
@@ -276,7 +276,7 @@ public:
         //- and assign its contents to this. The behaviour largely as
         //- described in assign():
         //  - For MUST_READ and key not found: FatalIOError.
-        //  - For LAZY_READ and key not found: initialise field with Zero.
+        //  - For LAZY_READ and key not found: initialise field with zero.
         //  - For NO_READ and key not found: simply size the field.
         //  .
         Field
@@ -508,7 +508,7 @@ public:
         inline void operator=(const Type& val);
 
         //- Assign entries to zero
-        inline void operator=(const Foam::zero);
+        inline void operator=(Foam::zero);
 
         template<class Form, class Cmpt, direction nCmpt>
         void operator=(const VectorSpace<Form,Cmpt,nCmpt>&);
diff --git a/src/OpenFOAM/fields/Fields/Field/FieldI.H b/src/OpenFOAM/fields/Fields/Field/FieldI.H
index 4c34df88b14..6d1bf437dd2 100644
--- a/src/OpenFOAM/fields/Fields/Field/FieldI.H
+++ b/src/OpenFOAM/fields/Fields/Field/FieldI.H
@@ -29,8 +29,6 @@ License
 
 template<class Type>
 inline constexpr Foam::Field<Type>::Field() noexcept
-:
-    List<Type>()
 {}
 
 
@@ -49,28 +47,28 @@ inline Foam::Field<Type>::Field(const label len, const Type& val)
 
 
 template<class Type>
-inline Foam::Field<Type>::Field(const label len, const Foam::zero)
+inline Foam::Field<Type>::Field(const label len, Foam::zero)
 :
     List<Type>(len, Foam::zero{})
 {}
 
 
 template<class Type>
-inline Foam::Field<Type>::Field(const Foam::one, const Type& val)
+inline Foam::Field<Type>::Field(Foam::one, const Type& val)
 :
     List<Type>(Foam::one{}, val)
 {}
 
 
 template<class Type>
-inline Foam::Field<Type>::Field(const Foam::one, Type&& val)
+inline Foam::Field<Type>::Field(Foam::one, Type&& val)
 :
     List<Type>(Foam::one{}, std::move(val))
 {}
 
 
 template<class Type>
-inline Foam::Field<Type>::Field(const Foam::one, const Foam::zero)
+inline Foam::Field<Type>::Field(Foam::one, Foam::zero)
 :
     List<Type>(Foam::one{}, Foam::zero{})
 {}
@@ -209,7 +207,7 @@ inline void Foam::Field<Type>::operator=(const Type& val)
 
 
 template<class Type>
-inline void Foam::Field<Type>::operator=(const Foam::zero)
+inline void Foam::Field<Type>::operator=(Foam::zero)
 {
     List<Type>::operator=(Foam::zero{});
 }
diff --git a/src/OpenFOAM/fields/Fields/Field/SubField.H b/src/OpenFOAM/fields/Fields/Field/SubField.H
index 15e09522a71..be237c924ec 100644
--- a/src/OpenFOAM/fields/Fields/Field/SubField.H
+++ b/src/OpenFOAM/fields/Fields/Field/SubField.H
@@ -136,7 +136,13 @@ public:
     // Member Operators
 
         //- Allow cast to a const Field\<Type\>&
-        inline operator const Foam::Field<Type>&() const;
+        //  \note Marked as "strictly" deprecated.
+        //  Currently (2025-04) code still depends on this cast.
+        FOAM_DEPRECATED_STRICTER(2025-04, "dereference as SubField, not Field?")
+        operator const Foam::Field<Type>&() const
+        {
+            return *reinterpret_cast<const Field<Type>*>(this);
+        }
 
         //- Copy assign via UList operator. Takes linear time.
         inline void operator=(const SubField<Type>&);
@@ -148,7 +154,7 @@ public:
         inline void operator=(const Type& val);
 
         //- Assign all entries to zero
-        inline void operator=(const Foam::zero);
+        inline void operator=(Foam::zero);
 
         //- Copy assign via UList operator. Takes linear time.
         template<class Form, direction Ncmpts>
diff --git a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
index 235f981da7e..0aff687982e 100644
--- a/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
+++ b/src/OpenFOAM/fields/Fields/Field/SubFieldI.H
@@ -125,13 +125,6 @@ inline Foam::tmp<Foam::Field<Type>> Foam::SubField<Type>::T() const
 
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
-template<class Type>
-inline Foam::SubField<Type>::operator const Foam::Field<Type>&() const
-{
-    return *reinterpret_cast<const Field<Type>*>(this);
-}
-
-
 template<class Type>
 inline void Foam::SubField<Type>::operator=(const SubField<Type>& rhs)
 {
@@ -154,7 +147,7 @@ inline void Foam::SubField<Type>::operator=(const Type& val)
 
 
 template<class Type>
-inline void Foam::SubField<Type>::operator=(const Foam::zero)
+inline void Foam::SubField<Type>::operator=(Foam::zero)
 {
     SubList<Type>::operator=(Foam::zero{});
 }
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C
index 506942bb915..3336a347217 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.C
@@ -524,7 +524,7 @@ void clamp
 (
     GeometricField<Type, PatchField, GeoMesh>& result,
     const GeometricField<Type, PatchField, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     const MinMax<Type> range(Foam::zero_one{});
@@ -544,7 +544,7 @@ tmp<GeometricField<Type, PatchField, GeoMesh>>
 clamp
 (
     const GeometricField<Type, PatchField, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     auto tres =
@@ -566,7 +566,7 @@ tmp<GeometricField<Type, PatchField, GeoMesh>>
 clamp
 (
     const tmp<GeometricField<Type, PatchField, GeoMesh>>& tf1,
-    const Foam::zero_one
+    Foam::zero_one
 )
 {
     const auto& f1 = tf1();
diff --git a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H
index 5aab42aae0e..92fe6c87aad 100644
--- a/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H
+++ b/src/OpenFOAM/fields/GeometricFields/GeometricField/GeometricFieldFunctions.H
@@ -287,7 +287,7 @@ void clamp
 (
     GeometricField<Type, PatchField, GeoMesh>& result,
     const GeometricField<Type, PatchField, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 template<class Type, template<class> class PatchField, class GeoMesh>
@@ -295,7 +295,7 @@ tmp<GeometricField<Type, PatchField, GeoMesh>>
 clamp
 (
     const GeometricField<Type, PatchField, GeoMesh>& f1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 template<class Type, template<class> class PatchField, class GeoMesh>
@@ -303,7 +303,7 @@ tmp<GeometricField<Type, PatchField, GeoMesh>>
 clamp
 (
     const tmp<GeometricField<Type, PatchField, GeoMesh>>& tf1,
-    const Foam::zero_one
+    Foam::zero_one
 );
 
 BINARY_TYPE_FUNCTION_FS(Type, Type, MinMax<Type>, clamp)
diff --git a/src/OpenFOAM/include/stdFoam.H b/src/OpenFOAM/include/stdFoam.H
index 24cf6c14b30..5878f8e7907 100644
--- a/src/OpenFOAM/include/stdFoam.H
+++ b/src/OpenFOAM/include/stdFoam.H
@@ -24,7 +24,7 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Description
-    Includes some standard C++ headers, defines global macros and templates
+    Includes some common C++ headers, defines global macros and templates
     used in multiple places by OpenFOAM.
 
 \*---------------------------------------------------------------------------*/
@@ -36,6 +36,7 @@ Description
 #include <initializer_list>
 #include <iterator>  // for std::begin, std::end, ...
 #include <memory>
+#include <numeric>   // for std::iota, std::reduce, ...
 #include <type_traits>
 #include <utility>
 
diff --git a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H
index 60e985a25e1..017a6adf673 100644
--- a/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H
+++ b/src/OpenFOAM/matrices/DiagonalMatrix/DiagonalMatrix.H
@@ -43,7 +43,6 @@ SourceFiles
 #define Foam_DiagonalMatrix_H
 
 #include "List.H"
-#include <numeric>
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H b/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H
index 0ef3cd52a11..96f6e53f112 100644
--- a/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H
+++ b/src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H
@@ -45,7 +45,6 @@ SourceFiles
 
 #include "Matrix.H"
 #include "Identity.H"
-#include <numeric>
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C
index 5e472755d67..fafaabee130 100644
--- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C
+++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C
@@ -239,7 +239,7 @@ void Foam::GAMGSolver::Vcycle
                         coarseCorrFields[leveli],
                         const_cast<solveScalarField&>
                         (
-                            ACf.operator const solveScalarField&()
+                            static_cast<const solveScalarField&>(ACf)
                         ),
                         matrixLevels_[leveli],
                         interfaceLevelsBouCoeffs_[leveli],
@@ -346,11 +346,10 @@ void Foam::GAMGSolver::Vcycle
                 scratch1,
                 coarseCorrFields[leveli].size()
             );
-            solveScalarField& ACfRef =
-                const_cast<solveScalarField&>
-                (
-                    ACf.operator const solveScalarField&()
-                );
+            auto& ACfRef = const_cast<solveScalarField&>
+            (
+                static_cast<const solveScalarField&>(ACf)
+            );
 
             if (interpolateCorrection_)
             {
diff --git a/src/OpenFOAM/meshes/boundBox/boundBox.H b/src/OpenFOAM/meshes/boundBox/boundBox.H
index 554c93285cf..109a53ff792 100644
--- a/src/OpenFOAM/meshes/boundBox/boundBox.H
+++ b/src/OpenFOAM/meshes/boundBox/boundBox.H
@@ -164,7 +164,7 @@ public:
         inline explicit boundBox(const point& p);
 
         //- Construct a 0/1 unit bounding box
-        inline explicit boundBox(const Foam::zero_one);
+        inline explicit boundBox(Foam::zero_one);
 
         //- Construct from bound box min/max points
         inline boundBox(const point& min, const point& max);
@@ -295,7 +295,7 @@ public:
             inline void reset();
 
             //- Reset to a 0/1 unit bounding box
-            inline void reset(const Foam::zero_one);
+            inline void reset(Foam::zero_one);
 
             //- Reset min/max to be identical to the specified point
             inline void reset(const point& pt);
diff --git a/src/OpenFOAM/meshes/boundBox/boundBoxI.H b/src/OpenFOAM/meshes/boundBox/boundBoxI.H
index 4b900ae1c53..147944fe860 100644
--- a/src/OpenFOAM/meshes/boundBox/boundBoxI.H
+++ b/src/OpenFOAM/meshes/boundBox/boundBoxI.H
@@ -112,7 +112,7 @@ inline Foam::boundBox::boundBox()
 {}
 
 
-inline Foam::boundBox::boundBox(const Foam::zero_one)
+inline Foam::boundBox::boundBox(Foam::zero_one)
 :
     min_(point::zero),
     max_(point::one)
@@ -306,7 +306,7 @@ inline void Foam::boundBox::reset()
 }
 
 
-inline void Foam::boundBox::reset(const Foam::zero_one)
+inline void Foam::boundBox::reset(Foam::zero_one)
 {
     min_ = point::zero;
     max_ = point::one;
diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkField.H b/src/OpenFOAM/meshes/ijkMesh/IjkField.H
index f7e0b284495..8ce84d24823 100644
--- a/src/OpenFOAM/meshes/ijkMesh/IjkField.H
+++ b/src/OpenFOAM/meshes/ijkMesh/IjkField.H
@@ -81,7 +81,7 @@ public:
         inline IjkField(const labelVector& ijk, const Type& val);
 
         //- Construct with sizing information and initial values of zero
-        inline IjkField(const labelVector& ijk, const Foam::zero);
+        inline IjkField(const labelVector& ijk, Foam::zero);
 
         //- Copy construct from components
         inline IjkField(const labelVector& ijk, const UList<Type>& list);
@@ -118,7 +118,7 @@ public:
         //- Clear dimensions and field
         inline void clear();
 
-        //- Change dimensions. Fill new values with Zero
+        //- Change dimensions. Fill new values with zero
         void resize(const labelVector& newSizes);
 
         //- Change dimensions
diff --git a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H
index 45c9afade78..97c44b22b0a 100644
--- a/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H
+++ b/src/OpenFOAM/meshes/ijkMesh/IjkFieldI.H
@@ -75,7 +75,7 @@ template<class Type>
 inline Foam::IjkField<Type>::IjkField
 (
     const labelVector& ijk,
-    const Foam::zero
+    Foam::zero
 )
 :
     Field<Type>(cmptProduct(ijk), Foam::zero{}),
@@ -101,7 +101,7 @@ inline Foam::IjkField<Type>::IjkField
             << nl << nl;
         #endif
 
-        Field<Type>::resize(ijk_.size(), Zero);
+        Field<Type>::resize(ijk_.size(), Foam::zero{});
     }
 }
 
@@ -124,7 +124,7 @@ inline Foam::IjkField<Type>::IjkField
             << nl << nl;
         #endif
 
-        Field<Type>::resize(ijk_.size(), Zero);
+        Field<Type>::resize(ijk_.size(), Foam::zero{});
     }
 }
 
diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C
index a0a55385e45..f1b20cb1a35 100644
--- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C
+++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C
@@ -1134,8 +1134,12 @@ void Foam::syncTools::syncBoundaryFaceList
                         pp.size(),
                         pp.start()-boundaryOffset
                     );
-                    const List<T>& fakeList = recvFld;
-                    top(procPatch, const_cast<List<T>&>(fakeList));
+
+                    auto& fakeList = const_cast<List<T>&>
+                    (
+                        static_cast<const List<T>&>(recvFld)
+                    );
+                    top(procPatch, fakeList);
 
                     SubList<T> patchValues
                     (
diff --git a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H
index a30a872250a..26d24f1f497 100644
--- a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H
+++ b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBox.H
@@ -202,7 +202,7 @@ public:
     // Constructors
 
         //- Construct a 0/1 unit bounding box
-        inline explicit treeBoundBox(const Foam::zero_one);
+        inline explicit treeBoundBox(Foam::zero_one);
 
         //- Construct a bounding box containing a single initial point
         inline explicit treeBoundBox(const point& p);
diff --git a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H
index 08bff3acfa2..5315c457024 100644
--- a/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H
+++ b/src/OpenFOAM/meshes/treeBoundBox/treeBoundBoxI.H
@@ -31,9 +31,9 @@ License
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
-inline Foam::treeBoundBox::treeBoundBox(const Foam::zero_one)
+inline Foam::treeBoundBox::treeBoundBox(Foam::zero_one)
 :
-    boundBox(zero_one{})
+    boundBox(Foam::zero_one{})
 {}
 
 
diff --git a/src/OpenFOAM/primitives/Scalar/scalarImpl.H b/src/OpenFOAM/primitives/Scalar/scalarImpl.H
index 0d1564dde56..cde30b8c7fd 100644
--- a/src/OpenFOAM/primitives/Scalar/scalarImpl.H
+++ b/src/OpenFOAM/primitives/Scalar/scalarImpl.H
@@ -292,7 +292,7 @@ inline bool notEqual(const Scalar a, const Scalar b)
 
 
 //- Clamp scalar value to a 0-1 range
-inline Scalar clamp(const Scalar val, const Foam::zero_one)
+inline Scalar clamp(const Scalar val, Foam::zero_one)
 {
     return (val < 0) ? 0 : (1 < val) ? 1 : val;
 }
diff --git a/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H b/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H
index 71e3632bfc6..26464e0d16c 100644
--- a/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H
+++ b/src/OpenFOAM/primitives/ranges/MinMax/MinMaxOps.H
@@ -84,7 +84,7 @@ struct clampOp
     {}
 
     //- Construct as 0-1 min/max range
-    clampOp(const Foam::zero_one)
+    clampOp(Foam::zero_one)
     :
         clampOp(MinMax<T>(Foam::zero_one{}))
     {}
diff --git a/src/conversion/vtk/adaptor/foamVtkToolsI.H b/src/conversion/vtk/adaptor/foamVtkToolsI.H
index aa2da4eeb21..435845f3b76 100644
--- a/src/conversion/vtk/adaptor/foamVtkToolsI.H
+++ b/src/conversion/vtk/adaptor/foamVtkToolsI.H
@@ -25,8 +25,6 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include <numeric>
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 inline Foam::UList<uint8_t> Foam::vtk::Tools::asUList
diff --git a/src/fileFormats/ensight/part/faces/ensightFaces.C b/src/fileFormats/ensight/part/faces/ensightFaces.C
index 4b41a67fd20..393182e2851 100644
--- a/src/fileFormats/ensight/part/faces/ensightFaces.C
+++ b/src/fileFormats/ensight/part/faces/ensightFaces.C
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2016-2022 OpenCFD Ltd.
+    Copyright (C) 2016-2025 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -193,22 +193,22 @@ void Foam::ensightFaces::sort()
         if (!sub.empty())
         {
             SubList<label> ids(sub, addressing());
-            labelList order(Foam::sortedOrder(ids));
+            const labelList order(Foam::sortedOrder(ids));
 
-            ids = reorder<labelList>(order, ids);
+            ids = UIndirectList<label>(ids, order).list();
 
             // Sort flip map as well
             if (!flipMap_.empty())
             {
                 SubList<bool> flips(flipMap_, sub);
-                flips = reorder<boolList>(order, flips);
+                flips = UIndirectList<bool>(flips, order).list();
             }
 
             // Sort face ordering as well
             if (!faceOrder_.empty())
             {
                 SubList<label> faceOrder(faceOrder_, sub);
-                faceOrder = reorder<labelList>(order, faceOrder);
+                faceOrder = UIndirectList<label>(faceOrder, order).list();
             }
         }
     }
-- 
GitLab