@@ -2906,7 +2906,7 @@ The Fortran 2023 released in Nov 2023: as usual compiler vendors are
29062906introducing support incrementally.
29072907For Intel's @command{ifx} see
29082908@uref{https://www.intel.com/content/www/us/en/developer/articles/technical/fortran-language-and-openmp-features-in-ifx.html#Fortran%20Standards}.
2909- For @I{LLVM}'s @command{flang} aka @command{flang-new} see
2909+ For @I{LLVM}'s @command{flang} see
29102910@uref{https://flang.llvm.org/docs/F202X.html}.
29112911@code{gfortran} does not have complete support even for the 2008 and
291229122018 standards, but the option @option{-std=f2023} is supported from
@@ -16286,21 +16286,31 @@ C++ header @file{cfloat}, which provide constants such as
1628616286@apivar TRUE
1628716287@apivar FALSE
1628816288@apihdr R_ext/Boolean.h
16289- The included header @file{R_ext/Boolean.h} has enumeration
16290- constants @code{TRUE} and @code{FALSE} of type @code{Rboolean} in
16291- order to provide a way of using ``logical'' variables in C consistently.
16292- This can conflict with other software: for example it conflicts with the
16293- headers in @I{IJG}'s @code{jpeg-9} (but not earlier versions).
16294- @code{Rboolean} cannot represent @code{NA} and hence cannot be used for
16295- elements of R logical vectors.
16289+ The included header @file{R_ext/Boolean.h} has enumeration constants
16290+ @code{TRUE} and @code{FALSE} of type @code{Rboolean} in order to provide
16291+ a way of using ``logical'' variables in C consistently. This can
16292+ conflict with other software: for example it conflicts with the headers
16293+ in @I{IJG}'s @code{jpeg-9} (but not earlier versions). @code{Rboolean}
16294+ cannot represent @code{NA}@footnote{Most compilers do not check values
16295+ when assigning to an @code{enum} and store this type as an @code{int},
16296+ so this may appear to work now but it likely to fail in future.} and
16297+ hence cannot be used for elements of R logical vectors.
1629616298
1629716299Type @code{Rboolean} is being phased out: as from @R{}@tie{}4.5.0 the
1629816300header also makes available the type @code{bool} and values @code{true}
1629916301and @code{false}. These are reserved words in C23 and C++11 and
16300- available @emph{via} header @file{stdbool.h} as from C99. (@code{bool}
16301- is not a drop-in replacement for @code{Rboolean} as it is usually stored
16302- in a byte and @code{Raoolean} in an @code{int}, hence 4 bytes.)
16303-
16302+ available @emph{via} header @file{stdbool.h} as from C99. (Type
16303+ @code{bool} is not a drop-in replacement for @code{Rboolean} as it is
16304+ usually stored in a byte and @code{Rboolean} in an @code{int}, hence 4
16305+ bytes.)
16306+
16307+ Some package maintainers may want to exclude the provision of
16308+ @code{TRUE}, @code{FALSE}, @code{true}, @code{false} and @code{bool} to
16309+ avoid clashes with other headers such as the IJG ones mentioned above.
16310+ This cannot be done entirely (the last three are keywords in C23 and
16311+ C++11) but as from @R{}@tie{}4.5.0 defining @code{R_INCLUDE_BOOLEAN_H}
16312+ to @code{0} before including any header which includes this one (such as
16313+ @file{R.h} and @file{Rinternals.h}) skips its body.
1630416314
1630516315@node Optimization
1630616316@section Optimization
0 commit comments