-
Notifications
You must be signed in to change notification settings - Fork 51
Open
Description
Invoking the move constructor of external_pointer<>
clears attributes on an external pointer object.
I would expect the third and fourth output to be identical to the second output. A possible fix is duckdb/duckdb@12f6f10 (this project uses a vendored version of cpp11).
library(cpp11)
cpp_source(
code = '
#include "cpp11/external_pointer.hpp"
#include "cpp11/strings.hpp"
template <class X>
cpp11::external_pointer<int> test_int() {
X a = 0;
auto p = cpp11::external_pointer<X>(&a, false);
Rf_PrintValue(p);
Rf_setAttrib(p, R_ClassSymbol, cpp11::writable::strings({"foo"}));
Rf_PrintValue(p);
return std::move(p);
}
[[cpp11::register]]
SEXP test() {
auto p = cpp11::sexp(test_int<int>());
Rf_PrintValue(p);
return p;
}
'
)
out <- test()
#> <pointer: 0x16f0af42c>
#> <pointer: 0x16f0af42c>
#> attr(,"class")
#> [1] "foo"
#> <pointer: 0x16f0af42c>
out
#> <pointer: 0x16f0af42c>
Created on 2023-03-02 with reprex v2.0.2
Metadata
Metadata
Assignees
Labels
No labels