From 51725a49a799168c184c8df38a4e5bcd386de6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Mon, 24 Mar 2025 15:37:15 +0100 Subject: [PATCH 1/7] generalize sapply solution to get result_of functions --- inst/include/Rcpp/sugar/functions/sapply.h | 39 ++++++---------------- inst/include/Rcpp/traits/result_of.h | 29 ++++++++-------- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/inst/include/Rcpp/sugar/functions/sapply.h b/inst/include/Rcpp/sugar/functions/sapply.h index f5ee94449..0486159fa 100644 --- a/inst/include/Rcpp/sugar/functions/sapply.h +++ b/inst/include/Rcpp/sugar/functions/sapply.h @@ -1,7 +1,8 @@ // sapply.h: Rcpp R/C++ interface class library -- sapply // -// Copyright (C) 2010 - 2023 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -27,36 +28,16 @@ namespace Rcpp{ namespace sugar{ -template -struct sapply_application_result_of -{ -#if __cplusplus >= 201103L - #if __cplusplus < 201703L - // deprecated by C++17, removed by C++2020, see https://en.cppreference.com/w/cpp/types/result_of - typedef typename ::std::result_of::type type; - #else - // since C++17, see https://en.cppreference.com/w/cpp/types/result_of - typedef typename ::std::invoke_result::type type; - #endif -#else - // TODO this else branch can likely go - typedef typename ::Rcpp::traits::result_of::type type; -#endif -}; - -// template -// using sapply_application_result_of_t = typename sapply_application_result_of::type; - template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< - typename ::Rcpp::sugar::sapply_application_result_of::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Sapply > { public: - typedef typename ::Rcpp::sugar::sapply_application_result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; @@ -87,13 +68,13 @@ class Sapply : public VectorBase< template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< - typename ::Rcpp::sugar::sapply_application_result_of::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Sapply > { public: - typedef typename ::Rcpp::sugar::sapply_application_result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; @@ -124,15 +105,15 @@ template inline sugar::Sapply< RTYPE,NA,T,Function, traits::same_type< - typename ::Rcpp::sugar::sapply_application_result_of::type , - typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype >::type + typename ::Rcpp::traits::result_of::type , + typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype >::type >::value > sapply( const Rcpp::VectorBase& t, Function fun ){ return sugar::Sapply::type , - typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype >::type + typename ::Rcpp::traits::result_of::type , + typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype >::type >::value >( t, fun ) ; } diff --git a/inst/include/Rcpp/traits/result_of.h b/inst/include/Rcpp/traits/result_of.h index 2c3f849e0..09159d014 100644 --- a/inst/include/Rcpp/traits/result_of.h +++ b/inst/include/Rcpp/traits/result_of.h @@ -3,7 +3,8 @@ // // result_of.h: Rcpp R/C++ interface class library -- traits to help wrap // -// Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois, Iñaki Ucar // // This file is part of Rcpp. // @@ -26,24 +27,20 @@ namespace Rcpp{ namespace traits{ -template +template struct result_of{ - typedef typename T::result_type type ; -} ; - -template -struct result_of< RESULT_TYPE (*)(INPUT_TYPE) >{ - typedef RESULT_TYPE type ; -} ; - -template -struct result_of< RESULT_TYPE (*)(U1, U2) >{ - typedef RESULT_TYPE type ; +#if __cplusplus < 201703L + // deprecated by C++17, removed by C++2020, see https://en.cppreference.com/w/cpp/types/result_of + typedef typename ::std::result_of::type type; +#else + // since C++17, see https://en.cppreference.com/w/cpp/types/result_of + typedef typename ::std::invoke_result::type type; +#endif } ; -template -struct result_of< RESULT_TYPE (*)(U1, U2, U3) >{ - typedef RESULT_TYPE type ; +template +struct result_of{ + typename T::result_type type ; } ; } From e37236cddc8fcc2b2088202b4d56943bd1fb1d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Mon, 24 Mar 2025 15:38:20 +0100 Subject: [PATCH 2/7] adapt outer, lapply, mapply --- inst/include/Rcpp/sugar/functions/lapply.h | 5 +++-- .../Rcpp/sugar/functions/mapply/mapply_2.h | 15 ++++++++------- .../Rcpp/sugar/functions/mapply/mapply_3.h | 7 ++++--- inst/include/Rcpp/sugar/matrix/outer.h | 7 ++++--- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/inst/include/Rcpp/sugar/functions/lapply.h b/inst/include/Rcpp/sugar/functions/lapply.h index 5856d11cc..7d098010e 100644 --- a/inst/include/Rcpp/sugar/functions/lapply.h +++ b/inst/include/Rcpp/sugar/functions/lapply.h @@ -2,7 +2,8 @@ // // lapply.h: Rcpp R/C++ interface class library -- lapply // -// Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -33,7 +34,7 @@ class Lapply : public VectorBase< > { public: typedef Rcpp::VectorBase VEC ; - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; Lapply( const VEC& vec_, Function fun_ ) : vec(vec_), fun(fun_){} diff --git a/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h b/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h index 9173fddc1..8185f6220 100644 --- a/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h +++ b/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h @@ -2,7 +2,8 @@ // // mapply_2.h: Rcpp R/C++ interface class library -- mapply_2 // -// Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -32,13 +33,13 @@ template class Mapply_2 : public VectorBase< Rcpp::traits::r_sexptype_traits< - typename ::Rcpp::traits::result_of::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2 > { public: - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2( const T_1& vec_1_, const T_2& vec_2_, Function fun_ ) : vec_1(vec_1_), vec_2(vec_2_), fun(fun_){} @@ -62,14 +63,14 @@ template ::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Vector_Primitive > { public: - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Vector_Primitive( const T_1& vec_1_, PRIM_2 prim_2_, Function fun_ ) : vec_1(vec_1_), prim_2(prim_2_), fun(fun_){} @@ -93,14 +94,14 @@ template ::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Primitive_Vector > { public: - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Primitive_Vector( PRIM_1 prim_1_, const T_2& vec_2_, Function fun_ ) : prim_1(prim_1_), vec_2(vec_2_), fun(fun_){} diff --git a/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h b/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h index 6f6e04c20..e009b9142 100644 --- a/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h +++ b/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h @@ -2,7 +2,8 @@ // // mapply_3.h: Rcpp R/C++ interface class library -- mapply_3 // -// Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2012 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -33,13 +34,13 @@ template < > class Mapply_3 : public VectorBase< Rcpp::traits::r_sexptype_traits< - typename ::Rcpp::traits::result_of::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_3 > { public: - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; typedef Rcpp::VectorBase VEC_1 ; typedef Rcpp::VectorBase VEC_2 ; diff --git a/inst/include/Rcpp/sugar/matrix/outer.h b/inst/include/Rcpp/sugar/matrix/outer.h index 1c114862a..5a7b4aa03 100644 --- a/inst/include/Rcpp/sugar/matrix/outer.h +++ b/inst/include/Rcpp/sugar/matrix/outer.h @@ -2,7 +2,8 @@ // // outer.h: Rcpp R/C++ interface class library -- outer // -// Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -31,13 +32,13 @@ template class Outer : public MatrixBase< Rcpp::traits::r_sexptype_traits< - typename ::Rcpp::traits::result_of::type + typename ::Rcpp::traits::result_of::type >::rtype , true , Outer > { public: - typedef typename ::Rcpp::traits::result_of::type result_type ; + typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; From 619d404084a5a3bc97fa04bad70bb75511bb6941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Thu, 27 Mar 2025 16:45:04 +0100 Subject: [PATCH 3/7] add tests --- inst/include/Rcpp/traits/result_of.h | 2 +- inst/tinytest/cpp/sugar.cpp | 63 +++++++++++++++++++++++++++- inst/tinytest/test_sugar.R | 55 +++++++++++++++++++++++- 3 files changed, 116 insertions(+), 4 deletions(-) diff --git a/inst/include/Rcpp/traits/result_of.h b/inst/include/Rcpp/traits/result_of.h index 09159d014..61471359a 100644 --- a/inst/include/Rcpp/traits/result_of.h +++ b/inst/include/Rcpp/traits/result_of.h @@ -4,7 +4,7 @@ // result_of.h: Rcpp R/C++ interface class library -- traits to help wrap // // Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois -// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois, Iñaki Ucar +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // diff --git a/inst/tinytest/cpp/sugar.cpp b/inst/tinytest/cpp/sugar.cpp index 823f3db94..d436559b9 100644 --- a/inst/tinytest/cpp/sugar.cpp +++ b/inst/tinytest/cpp/sugar.cpp @@ -2,6 +2,7 @@ // sugar.cpp: Rcpp R/C++ interface class library -- sugar unit tests // // Copyright (C) 2012 - 2025 Dirk Eddelbuettel and Romain Francois +// Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // @@ -22,7 +23,6 @@ using namespace Rcpp ; template - class square : public std::function { public: T operator()( T t) const { return t*t ; } @@ -222,11 +222,58 @@ NumericVector runit_na_omit( NumericVector xx ){ } // [[Rcpp::export]] -List runit_lapply( IntegerVector xx){ +List runit_lapply( NumericVector xx ){ + List res = lapply( xx, square() ); + return res ; +} + +// [[Rcpp::export]] +List runit_lapply_rawfun( NumericVector xx){ + List res = lapply( xx, raw_square ); + return res ; +} + +// [[Rcpp::export]] +List runit_lapply_lambda(NumericVector xx){ + List res = lapply(xx, [](double x) { return x*x; }); + return res; +} + +// [[Rcpp::export]] +List runit_lapply_seq( IntegerVector xx){ List res = lapply( xx, seq_len ); return res ; } +// [[Rcpp::export]] +NumericVector runit_mapply2(NumericVector xx, NumericVector yy){ + NumericVector res = mapply(xx, yy, std::plus()); + return res; +} + +// [[Rcpp::export]] +NumericVector runit_mapply2_lambda(NumericVector xx, NumericVector yy){ + NumericVector res = mapply(xx, yy, [](double x, double y) { return x+y; }); + return res; +} + +// [[Rcpp::export]] +NumericVector runit_mapply3_lambda(NumericVector xx, NumericVector yy, NumericVector zz){ + NumericVector res = mapply(xx, yy, zz, [](double x, double y, double z) { return x+y+z; }); + return res; +} + +// [[Rcpp::export]] +LogicalVector runit_mapply2_logical(NumericVector xx, NumericVector yy){ + return all(mapply(xx, yy, std::plus()) < 100.0); +} + +// [[Rcpp::export]] +List runit_mapply2_list(IntegerVector xx, IntegerVector yy){ + List res = mapply(xx, yy, seq); + return res ; +} + // [[Rcpp::export]] List runit_minus( IntegerVector xx ){ return List::create( @@ -327,6 +374,12 @@ NumericVector runit_sapply_rawfun( NumericVector xx){ return res ; } +// [[Rcpp::export]] +NumericVector runit_sapply_lambda(NumericVector xx){ + NumericVector res = sapply(xx, [](double x) { return x*x; }); + return res; +} + // [[Rcpp::export]] LogicalVector runit_sapply_square( NumericVector xx){ return all( sapply( xx * xx , square() ) < 10.0 ); @@ -444,6 +497,12 @@ NumericMatrix runit_outer( NumericVector xx, NumericVector yy){ return m ; } +// [[Rcpp::export]] +NumericMatrix runit_outer_lambda(NumericVector xx, NumericVector yy){ + NumericMatrix m = outer(xx, yy, [](double x, double y) { return x + y; }); + return m ; +} + // [[Rcpp::export]] List runit_row( NumericMatrix xx ){ return List::create( diff --git a/inst/tinytest/test_sugar.R b/inst/tinytest/test_sugar.R index a751fa3fe..44549d95f 100644 --- a/inst/tinytest/test_sugar.R +++ b/inst/tinytest/test_sugar.R @@ -1,5 +1,6 @@ -## Copyright (C) 2010 - 2023 Dirk Eddelbuettel and Romain Francois +## Copyright (C) 2010 - 2024 Dirk Eddelbuettel and Romain Francois +## Copyright (C) 2025 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar ## ## This file is part of Rcpp. ## @@ -302,9 +303,49 @@ expect_equal( fx( c(1:10) ), fx( c(1:10) ) ) # test.sugar.lapply <- function( ){ fx <- runit_lapply +expect_equal( fx( 1:10 ), as.list((1:10)^2) ) + + +# test.sugar.lapply.rawfun <- function( ){ +fx <- runit_lapply_rawfun +expect_equal( fx( 1:10 ), as.list((1:10)^2) ) + + +# test.sugar.lapply.lambda <- function( ){ +fx <- runit_lapply_lambda +expect_equal( fx( 1:10 ), as.list((1:10)^2) ) + + +# test.sugar.lapply.seq <- function( ){ +fx <- runit_lapply_seq expect_equal( fx( 1:10 ), lapply( 1:10, seq_len ) ) +# test.sugar.mapply2 <- function( ){ +fx <- runit_mapply2 +expect_equal( fx(1:10, 1:10) , 1:10+1:10 ) + + +# test.sugar.mapply2.lambda <- function( ){ +fx <- runit_mapply2_lambda +expect_equal( fx(1:10, 1:10) , 1:10+1:10 ) + + +# test.sugar.mapply3.lambda <- function( ){ +fx <- runit_mapply3_lambda +expect_equal( fx(1:10, 1:10, 1:10) , 1:10+1:10+1:10 ) + + +# test.sugar.mapply2.logical <- function( ){ +fx <- runit_mapply2_logical +expect_true( fx(1:10, 1:10) ) + + +# test.sugar.mapply2.list <- function( ){ +fx <- runit_mapply2_list +expect_equal( fx(1:10, 1:10*2) , mapply(seq, 1:10, 1:10*2) ) + + # test.sugar.minus <- function( ){ fx <- runit_minus expect_equal(fx(1:10) , @@ -380,6 +421,11 @@ fx <- runit_sapply_rawfun expect_equal( fx(1:10) , (1:10)^2 ) +# test.sugar.sapply.lambda <- function( ){ +fx <- runit_sapply_lambda +expect_equal( fx(1:10) , (1:10)^2 ) + + # test.sugar.sapply.square <- function( ){ fx <- runit_sapply_square expect_true( ! fx(1:10) ) @@ -492,6 +538,13 @@ y <- 1:5 expect_equal( fx(x,y) , outer(x,y,"+") ) +# test.sugar.matrix.outer.lambda <- function( ){ +fx <- runit_outer_lambda +x <- 1:2 +y <- 1:5 +expect_equal( fx(x,y) , outer(x,y,"+") ) + + # test.sugar.matrix.row <- function( ){ fx <- runit_row m <- matrix( 1:16, nc = 4 ) From 619432f96a3ce07035a3a830e72112337ae5e6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Sat, 29 Mar 2025 01:16:56 +0100 Subject: [PATCH 4/7] update Changelog --- ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index b9173cb08..a0b6d75b4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2025-03-29 Iñaki Ucar + + * inst/include/Rcpp/traits/result_of.h: Reimplement traits::result_of using + std::result_of (up to C++14) or std::invoke_result (C++17 or later), which + supports previous use cases and enables lambdas + * inst/include/Rcpp/sugar/functions/sapply.h: Use new result_of interface + * inst/include/Rcpp/sugar/functions/lapply.h: Idem + * inst/include/Rcpp/sugar/functions/mapply/mapply_2.h: Idem + * inst/include/Rcpp/sugar/functions/mapply/mapply_3.h: Idem + * inst/include/Rcpp/sugar/matrix/outer.h: Idem + * inst/tinytest/cpp/sugar.cpp: New tests for previous sugar functions + * inst/tinytest/test_sugar.R: Idem + 2025-03-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version and date From 8ba2d7b4854a53fc18417fd6ed5ae257397d2641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Mon, 31 Mar 2025 14:20:08 +0200 Subject: [PATCH 5/7] re-add support for functions without argument specification --- inst/include/Rcpp/traits/result_of.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/inst/include/Rcpp/traits/result_of.h b/inst/include/Rcpp/traits/result_of.h index 61471359a..288495c9a 100644 --- a/inst/include/Rcpp/traits/result_of.h +++ b/inst/include/Rcpp/traits/result_of.h @@ -43,6 +43,11 @@ struct result_of{ typename T::result_type type ; } ; +template +struct result_of< RESULT_TYPE (*)(Args...) >{ + typedef RESULT_TYPE type ; +} ; + } } From 2d7c52134dfd708b6da1850245c78b0178a6c0d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1aki=20=C3=9Acar?= Date: Mon, 31 Mar 2025 16:08:04 +0200 Subject: [PATCH 6/7] fix missing typedef --- inst/include/Rcpp/sugar/functions/sapply.h | 3 --- inst/include/Rcpp/traits/result_of.h | 7 +------ 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/inst/include/Rcpp/sugar/functions/sapply.h b/inst/include/Rcpp/sugar/functions/sapply.h index 0486159fa..5b1311c5e 100644 --- a/inst/include/Rcpp/sugar/functions/sapply.h +++ b/inst/include/Rcpp/sugar/functions/sapply.h @@ -22,9 +22,6 @@ #ifndef Rcpp__sugar__sapply_h #define Rcpp__sugar__sapply_h -// This used to be conditional on a define and test in compiler.h -#include // ::std::result_of - namespace Rcpp{ namespace sugar{ diff --git a/inst/include/Rcpp/traits/result_of.h b/inst/include/Rcpp/traits/result_of.h index 288495c9a..a7f931efb 100644 --- a/inst/include/Rcpp/traits/result_of.h +++ b/inst/include/Rcpp/traits/result_of.h @@ -40,12 +40,7 @@ struct result_of{ template struct result_of{ - typename T::result_type type ; -} ; - -template -struct result_of< RESULT_TYPE (*)(Args...) >{ - typedef RESULT_TYPE type ; + typedef typename T::result_type type ; } ; } From 7c5df0cac0325e3322efef77ddbc8e8558b77ba9 Mon Sep 17 00:00:00 2001 From: Dirk Eddelbuettel Date: Mon, 31 Mar 2025 10:39:09 -0500 Subject: [PATCH 7/7] Roll micro version and date --- ChangeLog | 5 +++++ DESCRIPTION | 4 ++-- inst/include/Rcpp/config.h | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index a0b6d75b4..9340e6555 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2025-03-31 Dirk Eddelbuettel + + * DESCRIPTION (Version, Date): Roll micro version and date + * inst/include/Rcpp/config.h: Idem + 2025-03-29 Iñaki Ucar * inst/include/Rcpp/traits/result_of.h: Reimplement traits::result_of using diff --git a/DESCRIPTION b/DESCRIPTION index e7b82b50c..79ae115cf 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: Rcpp Title: Seamless R and C++ Integration -Version: 1.0.14.11 -Date: 2025-03-26 +Version: 1.0.14.12 +Date: 2025-03-31 Authors@R: c(person("Dirk", "Eddelbuettel", role = c("aut", "cre"), email = "edd@debian.org", comment = c(ORCID = "0000-0001-6419-907X")), person("Romain", "Francois", role = "aut", diff --git a/inst/include/Rcpp/config.h b/inst/include/Rcpp/config.h index 9c96f6999..da3c5c4b6 100644 --- a/inst/include/Rcpp/config.h +++ b/inst/include/Rcpp/config.h @@ -30,7 +30,7 @@ #define RCPP_VERSION_STRING "1.0.14" // the current source snapshot (using four components, if a fifth is used in DESCRIPTION we ignore it) -#define RCPP_DEV_VERSION RcppDevVersion(1,0,14,11) -#define RCPP_DEV_VERSION_STRING "1.0.14.11" +#define RCPP_DEV_VERSION RcppDevVersion(1,0,14,12) +#define RCPP_DEV_VERSION_STRING "1.0.14.12" #endif