Title: Consider masking definition of Rf_error()? · Issue #1247 · RcppCore/Rcpp · GitHub
Open Graph Title: Consider masking definition of Rf_error()? · Issue #1247 · RcppCore/Rcpp
X Title: Consider masking definition of Rf_error()? · Issue #1247 · RcppCore/Rcpp
Description: Somewhat related to a recent post on R-devel, some users will still try to use Rf_error() in C++ code using Rcpp. However, (as is documented) C++ destructors won't run when a longjmp occurs in cases like this. For example: #include Open Graph Description: Somewhat related to a recent post on R-devel, some users will still try to use Rf_error() in C++ code using Rcpp. However, (as is documented) C++ destructors won't run when a longjmp occurs in case...
X Description: Somewhat related to a recent post on R-devel, some users will still try to use Rf_error() in C++ code using Rcpp. However, (as is documented) C++ destructors won't run when a longjmp occurs in ...
Opengraph URL: https://github.com/RcppCore/Rcpp/issues/1247
X: @github
Domain: patch-diff.githubusercontent.com
Links:
Viewport: width=device-width
Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Consider masking definition of Rf_error()?","articleBody":"Somewhat related to a recent post on R-devel, some users will still try to use `Rf_error()` in C++ code using Rcpp. However, (as is documented) C++ destructors won't run when a longjmp occurs in cases like this. For example:\r\n\r\n`````\r\n#include \u003cRcpp.h\u003e\r\nusing namespace Rcpp;\r\n\r\nstruct A {\r\n A() { Rprintf(\"A()\\n\"); }\r\n ~A() { Rprintf(\"~A()\\n\"); }\r\n};\r\n\r\n// [[Rcpp::export]]\r\nSEXP uhoh() {\r\n A a;\r\n Rf_error(\"Oops!\");\r\n}\r\n\r\n/*** R\r\nuhoh()\r\n*/\r\n`````\r\n\r\nIn this example, `~A()` is never printed.\r\n\r\nWe could consider masking the definition of `Rf_error()` in these contexts. For example, something like:\r\n\r\n```\r\n#define Rf_error(...) \\\r\n static_assert(false, \"Use of Rf_error() in C++ contexts is unwise: consider using Rcpp::stop() instead.\");\r\n```\r\n\r\nThere might also be a way to provide our own definition of `Rf_error()` that \"masks\" the version provided by R, but I wasn't able to find something immediately obvious.","author":{"url":"https://github.com/kevinushey","@type":"Person","name":"kevinushey"},"datePublished":"2023-01-31T00:48:26.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":25},"url":"https://github.com/1247/Rcpp/issues/1247"}
route-pattern /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) route-controller voltron_issues_fragments route-action issue_layout fetch-nonce v2:8b0a18e0-f376-45db-987c-3bc269f95bf7 current-catalog-service-hash 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 request-id C42E:166B1C:18AEC69:227FAC1:6970DA53 html-safe-nonce ac4b946d47154eac90d6a1725f496a77f75517faacb45f885d3b3b1ae64ca80b visitor-payload eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNDJFOjE2NkIxQzoxOEFFQzY5OjIyN0ZBQzE6Njk3MERBNTMiLCJ2aXNpdG9yX2lkIjoiNjc4NDYwNjI5NDE3OTM3MTYwMyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 visitor-hmac 93e9913cdbe06b42b90eff4aa7d3d052ec3d5079a662ac1c2931b385fdaf5188 hovercard-subject-tag issue:1563436961 github-keyboard-shortcuts repository,issues,copilot google-site-verification Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I octolytics-url https://collector.github.com/github/collect analytics-location / fb:app_id 1401488693436528 apple-itunes-app app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/RcppCore/Rcpp/1247/issue_layout twitter:image https://opengraph.githubassets.com/b6a2a01ea78949ef92c0cded7cbf8da8b88e3b773b3c04e44a1331bef107ba3d/RcppCore/Rcpp/issues/1247 twitter:card summary_large_image og:image https://opengraph.githubassets.com/b6a2a01ea78949ef92c0cded7cbf8da8b88e3b773b3c04e44a1331bef107ba3d/RcppCore/Rcpp/issues/1247 og:image:alt Somewhat related to a recent post on R-devel, some users will still try to use Rf_error() in C++ code using Rcpp. However, (as is documented) C++ destructors won't run when a longjmp occurs in case... og:image:width 1200 og:image:height 600 og:site_name GitHub og:type object og:author:username kevinushey hostname github.com expected-hostname github.com None b9203e7efc62065329c3b7015a1e6d16fc14bce440abec7b0d3cbe9e4fb1e2e4 turbo-cache-control no-preview go-import github.com/RcppCore/Rcpp git https://github.com/RcppCore/Rcpp.git octolytics-dimension-user_id 5811336 octolytics-dimension-user_login RcppCore octolytics-dimension-repository_id 14005591 octolytics-dimension-repository_nwo RcppCore/Rcpp octolytics-dimension-repository_public true octolytics-dimension-repository_is_fork false octolytics-dimension-repository_network_root_id 14005591 octolytics-dimension-repository_network_root_nwo RcppCore/Rcpp turbo-body-classes logged-out env-production page-responsive disable-turbo false browser-stats-url https://api.github.com/_private/browser/stats browser-errors-url https://api.github.com/_private/browser/errors release eb3c92b74ae48a78cffd8700b8eb5f60bad61528 ui-target full theme-color #1e2327 color-scheme light dark
URLs of crawlers that visited me.