@@ -58,6 +58,8 @@ class XPtr :
5858
5959 typedef StoragePolicy<XPtr> Storage;
6060
61+ #if defined(RCPP_USING_CXX11)
62+
6163 /* *
6264 * constructs a XPtr wrapping the external pointer (EXTPTRSXP SEXP)
6365 *
@@ -75,14 +77,34 @@ class XPtr :
7577 * constructs a XPtr wrapping the external pointer (EXTPTRSXP SEXP)
7678 *
7779 * @param xp external pointer to wrap
78- * @param tag tag to assign to external pointer
80+ * @param tag tag to assign to external pointer
7981 * @param prot protected data to assign to external pointer
8082 */
8183 explicit XPtr (SEXP x, SEXP tag, SEXP prot) : XPtr (x) {
8284 R_SetExternalPtrTag ( x, tag);
8385 R_SetExternalPtrProtected (x, prot);
8486 };
8587
88+ #else
89+
90+ /* *
91+ * constructs a XPtr wrapping the external pointer (EXTPTRSXP SEXP)
92+ *
93+ * @param xp external pointer to wrap
94+ */
95+ explicit XPtr (SEXP x, SEXP tag = R_NilValue, SEXP prot = R_NilValue) {
96+ if (TYPEOF (x) != EXTPTRSXP) {
97+ const char * fmt = " Expecting an external pointer: [type=%s]." ;
98+ throw ::Rcpp::not_compatible (fmt, Rf_type2char (TYPEOF (x)));
99+ }
100+
101+ Storage::set__ (x);
102+ R_SetExternalPtrTag ( x, tag);
103+ R_SetExternalPtrProtected (x, prot);
104+ };
105+
106+ #endif
107+
86108 /* *
87109 * creates a new external pointer wrapping the dumb pointer p.
88110 *
0 commit comments