# cpp11 0.4.3
* Modernized the GitHub Actions workflows and updated some internal tests to
better align with changes in those workflows and the latest version of R
(#279)
* `cpp_source()` errors on non-existent file (#261).
* `cpp_register()` is quiet by default when R is non interactive (#289).
* updated test to adapt to changes in R 4.2.1 (#290).
# cpp11 0.4.2
* Romain François is now the maintainer.
# cpp11 0.4.1
* Fix crash related to unwind protect optimization (#244)
# cpp11 0.4.0
## New Features
* New opt-in message formatting with the {fmt} C++ library for
`cpp11::messages()` `cpp11::stop()` and `cpp11::warning()`. Set the
`CPP11_USE_FMT` macro to use this feature in your
package. (@sbearrows, #169, #208)
* New `as_double()` and `as_integer()` methods to coerce integers to
doubles and doubles to integers to doubles (@sbearrows, #46)
* `cpp11::matrix` iterators can now be used either row-wise or
column-wise (the default) depending on the user's choice (@alyst,
#229)
## Improvements and fixes
* Read-only matrix accessors are now marked const (#234)
* `writable::r_vector` default constructors now return a 0 length
vector when converted to `SEXP` (#166)
* Read-only `r_vector` constructors now disallow implicit construction
with named arguments (#237)
* Read-only `r_vector.attr()` methods now return const objects, so it
is a compile time error to try to assign to them (#237)
* Fixed `+` and `+=` operators of `r_vector::[const_]iterator` to
conform the *iterators* concept: `+=` updates the iterator, and `+`
returns the updated copy, while keeping the original unchanged
(@alyst, #231)
* Remove undefined behavior when constructing global `cpp11::sexp`s (#224)
* Removed redundant `.Call calls` in cpp11.cpp file (@sbearrows, #170)
* Error messages now output original file name rather than the
temporary file name (@sbearrows, #194)
* `cpp_register()` now includes `attribute_visible` in the init
function, so packages compiled with `C_VISIBILITY` will find the
init function.
* Fixed bug when running `cpp_source()` on the same file more than
once (@sbearrows, #202)
* Allow cpp11 decorators of the form `cpp11::linking_to` (@sbearrows,
#193)
* Removed internal instances of `cpp11::stop()` and replaced with C++
exceptions (@sbearrows, #203)
* Names of named lists are now resized along with the list elements
(@sbearrows, #206)
# cpp11 0.3.1
# cpp11 0.3.0
## New functions and features
* New `x.empty()` method to check if a vector is empty (@sbearrows, #182)
* New `x.named()` method to check if a vector is named (@sbearrows, #186)
* New `na()` free function to return the NA sentinels for R objects
(@sbearrows, #17 9)
## Major fixes
* Memory no longer inadvertently leaks when move constructing vectors
(#173)
## minor improvements and fixes
* Incorrectly formatted cpp11 decorators now output a more informative
error message (@sbearrows, #127)
* Generated registration code now uses C collation to avoid spurious
changes from `tools::package_native_routine_registration_skeleton()`
(@sbearrows, #171)
* Makevars files which include filenames now handle spaces in paths
properly (@klmr, #160)
# cpp11 0.2.7
* Fix a transient memory leak for functions that return values from
`cpp11::unwind_protect()` and `cpp11::safe` (#154)
# cpp11 0.2.6
* `cpp_register()` now uses symbols exclusively in the `.Call()`
interface. This allows it to be more robust in interactive use with
the pkgload package.
# cpp11 0.2.5
* `cpp_source()` gains a `cxx_std` argument to control which C++
standard is used. This allows you to use code from `C++14` and
later standards with cpp_source(). (#100)
* The cpp11 knitr engine now allows you to set the `cxx_std` chunk
option to control the C++ standard used.
* `cpp_source()` now has much more informative error messages when
compilation fails (#125, #139)
* `cpp_source()` now uses a unique name for the DLL, so works when run
multiple times on the same source file on Windows (#143)
* `writable::list_of<T>` now supports modification of vectors as
intended (#131).
* Errors when running
`tools::package_native_routine_registration_skeleton()` are no
longer swallowed (#134)
* `cpp_source()` can now accept a source file called `cpp11.cpp`
(#133)
* `named_arg` now explicitly protect their values, avoiding protection
issues when using large
inputs. [tidyverse/readr#1145](https://github.com/tidyverse/readr/issues/1145)
* `r_string(std::string)` now uses `Rf_mkCharLenCE()` instead of
`Rf_mkChar()`, which avoids the performance cost of checking the
string length.
* Writable vector classes now properly set their lengths as intended
when being copied to a read only class (#128).
Provides a header only, C++11 interface to R's C interface. Compared
to other approaches 'cpp11' strives to be safe against long jumps from
the C API as well as C++ exceptions, conform to normal R function
semantics and supports interaction with 'ALTREP' vectors.