Why does assert not work here?
c++, r, rcpp
Solution
Note that `assert()` etc are explicitly prohibited for CRAN uploads. Quoting from the CRAN Repo Policy page:
The code and examples provided in a package should never do anything which might be regarded as malicious or anti-social. The following are illustrative examples from past experience.
- Compiled code should never terminate the R process within which it is running. Thus C/C++ calls to `assert`/`abort`/`exit`, Fortran calls to `STOP` and so on must be avoided. Nor may R code call `q()`.
So the answer about debug mode is technically correct, but also note that you are not supposed to use this if you plan to upload CRAN at some point.
Problem
Here is the code: ``` #include <Rcpp.h> #include <iostream> #include <assert.h> #include <stdio.h> using namespace Rcpp; // [[Rcpp::export]] double eudist(NumericVector x, NumericVector y) { int nx = x.size(); int ny = y.size(); std::cout << nx << '\n' << ny << std::endl; assert(nx == ny); double dist=0; for(int i = 0; i < nx; i++) { dist += pow(x[i] - y[i], 2); } return sqrt(dist); } ``` After sourcing it into R, I get the following result, apparently it does not abort when there is an error: ``` #//////////////////////////////////////////////////// sourceCpp('x.cpp') #//////////////////////////////////////////////////// eudist(c(0, 0), c(1, 1)) 2 2 [1] 1.4142 #//////////////////////////////////////////////////// eudist(c(0, 0), c(1, 1, 1)) 2 3 [1] 1.4142 ```