Skip to content

Commit 4d3ed16

Browse files
committed
Fixed ambiguities of Vector/Matrix + int on 32 bit
1 parent 7487e18 commit 4d3ed16

File tree

5 files changed

+37
-34
lines changed

5 files changed

+37
-34
lines changed

inst/include/Rcpp/sugar/operators/divides.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -408,20 +408,20 @@ namespace sugar{
408408

409409
}
410410

411-
template <int RTYPE,bool NA, typename T>
412-
inline sugar::Divides_Vector_Primitive< RTYPE , NA, T >
411+
template <int RTYPE,bool NA, typename T, typename U>
412+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Divides_Vector_Primitive< RTYPE , NA, T > >::type
413413
operator/(
414414
const VectorBase<RTYPE,NA,T>& lhs,
415-
typename traits::storage_type<RTYPE>::type rhs
415+
U rhs
416416
) {
417417
return sugar::Divides_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
418418
}
419419

420420

421-
template <int RTYPE,bool NA, typename T>
422-
inline sugar::Divides_Primitive_Vector< RTYPE , NA,T>
421+
template <int RTYPE,bool NA, typename T, typename U>
422+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Divides_Primitive_Vector< RTYPE , NA,T> >::type
423423
operator/(
424-
typename traits::storage_type<RTYPE>::type lhs,
424+
U lhs,
425425
const VectorBase<RTYPE,NA,T>& rhs
426426
) {
427427
return sugar::Divides_Primitive_Vector<RTYPE,NA,T>( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/minus.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,20 +412,20 @@ namespace sugar{
412412

413413
}
414414

415-
template <int RTYPE,bool NA, typename T>
416-
inline sugar::Minus_Vector_Primitive< RTYPE , NA, T >
415+
template <int RTYPE,bool NA, typename T, typename U>
416+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Minus_Vector_Primitive< RTYPE , NA, T > >::type
417417
operator-(
418418
const VectorBase<RTYPE,NA,T>& lhs,
419-
typename traits::storage_type<RTYPE>::type rhs
419+
U rhs
420420
) {
421421
return sugar::Minus_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
422422
}
423423

424424

425-
template <int RTYPE,bool NA, typename T>
426-
inline sugar::Minus_Primitive_Vector< RTYPE , NA,T>
425+
template <int RTYPE,bool NA, typename T, typename U>
426+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Minus_Primitive_Vector< RTYPE , NA,T> >::type
427427
operator-(
428-
typename traits::storage_type<RTYPE>::type lhs,
428+
U lhs,
429429
const VectorBase<RTYPE,NA,T>& rhs
430430
) {
431431
return sugar::Minus_Primitive_Vector<RTYPE,NA,T>( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/plus.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,9 @@ namespace sugar{
442442

443443
}
444444

445+
445446
template <int RTYPE,bool NA, typename T, typename U>
446-
inline sugar::Plus_Vector_Primitive<RTYPE,NA,T>
447+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, typename sugar::Plus_Vector_Primitive<RTYPE,NA,T> >::type
447448
operator+(
448449
const VectorBase<RTYPE,NA,T>& lhs,
449450
U rhs
@@ -453,7 +454,7 @@ operator+(
453454

454455

455456
template <int RTYPE,bool NA, typename T, typename U>
456-
inline sugar::Plus_Vector_Primitive< RTYPE , NA , T >
457+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, typename sugar::Plus_Vector_Primitive< RTYPE , NA , T > >::type
457458
operator+(
458459
U rhs,
459460
const VectorBase<RTYPE,NA,T>& lhs
@@ -463,19 +464,19 @@ operator+(
463464

464465

465466

466-
template <int RTYPE,bool NA, typename T>
467-
inline sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T>
467+
template <int RTYPE,bool NA, typename T, typename U>
468+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T> >::type
468469
operator+(
469470
const VectorBase<RTYPE,NA,T>& lhs,
470-
typename sugar::NonaPrimitive< typename traits::storage_type<RTYPE>::type > rhs
471+
typename sugar::NonaPrimitive< U > rhs
471472
) {
472473
return sugar::Plus_Vector_Primitive_nona<RTYPE,NA,T>( lhs, rhs ) ;
473474
}
474475

475-
template <int RTYPE,bool NA, typename T>
476-
inline sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T >
476+
template <int RTYPE,bool NA, typename T, typename U>
477+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T > >::type
477478
operator+(
478-
typename sugar::NonaPrimitive< typename traits::storage_type<RTYPE>::type > rhs,
479+
typename sugar::NonaPrimitive< U > rhs,
479480
const VectorBase<RTYPE,NA,T>& lhs
480481
) {
481482
return sugar::Plus_Vector_Primitive_nona<RTYPE,NA, T >( lhs, rhs ) ;

inst/include/Rcpp/sugar/operators/times.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -424,40 +424,40 @@ namespace sugar{
424424

425425
}
426426

427-
template <int RTYPE,bool NA, typename T>
428-
inline sugar::Times_Vector_Primitive<RTYPE,NA,T>
427+
template <int RTYPE,bool NA, typename T, typename U>
428+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive<RTYPE,NA,T> >::type
429429
operator*(
430430
const VectorBase<RTYPE,NA,T>& lhs,
431-
typename traits::storage_type<RTYPE>::type rhs
431+
U rhs
432432
) {
433433
return sugar::Times_Vector_Primitive<RTYPE,NA,T>( lhs, rhs ) ;
434434
}
435435

436436

437-
template <int RTYPE,bool NA, typename T>
438-
inline sugar::Times_Vector_Primitive< RTYPE , NA , T >
437+
template <int RTYPE,bool NA, typename T, typename U>
438+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive< RTYPE , NA , T > >::type
439439
operator*(
440-
typename traits::storage_type<RTYPE>::type rhs,
440+
U rhs,
441441
const VectorBase<RTYPE,NA,T>& lhs
442442
) {
443443
return sugar::Times_Vector_Primitive<RTYPE,NA, T >( lhs, rhs ) ;
444444
}
445445

446446

447447

448-
template <int RTYPE,bool NA, typename T>
449-
inline sugar::Times_Vector_Primitive_nona<RTYPE,NA,T>
448+
template <int RTYPE,bool NA, typename T, typename U>
449+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive_nona<RTYPE,NA,T> >::type
450450
operator*(
451451
const VectorBase<RTYPE,NA,T>& lhs,
452-
typename sugar::NonaPrimitive< typename traits::storage_type<RTYPE>::type > rhs
452+
typename sugar::NonaPrimitive< U > rhs
453453
) {
454454
return sugar::Times_Vector_Primitive_nona<RTYPE,NA,T>( lhs, rhs ) ;
455455
}
456456

457-
template <int RTYPE,bool NA, typename T>
458-
inline sugar::Times_Vector_Primitive_nona< RTYPE , NA , T >
457+
template <int RTYPE,bool NA, typename T, typename U>
458+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference<U>::type >::value, sugar::Times_Vector_Primitive_nona< RTYPE , NA , T > >::type
459459
operator*(
460-
typename sugar::NonaPrimitive< typename traits::storage_type<RTYPE>::type > rhs,
460+
typename sugar::NonaPrimitive< U > rhs,
461461
const VectorBase<RTYPE,NA,T>& lhs
462462
) {
463463
return sugar::Times_Vector_Primitive_nona<RTYPE,NA, T >( lhs, rhs ) ;

inst/include/Rcpp/vector/Matrix.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@ inline std::ostream &operator<<(std::ostream & s, const Matrix<REALSXP, StorageP
249249

250250
#define RCPP_GENERATE_MATRIX_SCALAR_OPERATOR(__OPERATOR__) \
251251
template <int RTYPE, template <class> class StoragePolicy, typename T > \
252-
inline Matrix<RTYPE, StoragePolicy> operator __OPERATOR__ (const Matrix<RTYPE, StoragePolicy> &lhs, \
252+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference< T >::type >::value, \
253+
Matrix<RTYPE, StoragePolicy> >::type operator __OPERATOR__ (const Matrix<RTYPE, StoragePolicy> &lhs, \
253254
T rhs) { \
254255
Vector<RTYPE, StoragePolicy> v = static_cast<const Vector<RTYPE, StoragePolicy> &>(lhs) __OPERATOR__ rhs; \
255256
v.attr("dim") = Vector<INTSXP>::create(lhs.nrow(), lhs.ncol()); \
@@ -265,7 +266,8 @@ RCPP_GENERATE_MATRIX_SCALAR_OPERATOR(/)
265266

266267
#define RCPP_GENERATE_SCALAR_MATRIX_OPERATOR(__OPERATOR__) \
267268
template <int RTYPE, template <class> class StoragePolicy, typename T > \
268-
inline Matrix<RTYPE, StoragePolicy> operator __OPERATOR__ (T lhs, \
269+
inline typename traits::enable_if< traits::is_primitive< typename traits::remove_const_and_reference< T >::type >::value, \
270+
Matrix<RTYPE, StoragePolicy> >::type operator __OPERATOR__ (T lhs, \
269271
const Matrix<RTYPE, StoragePolicy> &rhs) { \
270272
Vector<RTYPE, StoragePolicy> v = static_cast<const Vector<RTYPE, StoragePolicy> &>(rhs); \
271273
v = lhs __OPERATOR__ v; \

0 commit comments

Comments
 (0)