Rcpp несоответствие между std0x и non-std0x

Я обнаружил странное несоответствие между Rcpp, который компилируется с и без -std = c ++ 0x.

Рассмотрим выражение

Function data_frame("data.frame");

GenericVector a;
a.push_back("17");

return data_frame(a, _["stringsAsFactors"]=0);

(прим. примечание: приведение к DataFrame в Rcpp фактически сводится к функции R, но не позволяет пользователю установить этот флаг.)

В «старом» C ++ (w / o -std = c ++ 0x set) этот код работает. В современном C ++ (w / -std = c ++ 0x set) это терпит неудачу, говоря, что «нельзя принудить« pairlist »класса в data.frame».

Очевидно, это не конец света: я просто не использую новые функции. Тем не менее, я признаюсь, что был полностью в недоумении относительно того, что вызывает это различие, и как обойти это, не выбрасывая C ++ 11. Любые идеи, кто-нибудь?

5

Решение

Мы любим C ++ 11 и не можем дождаться его использования. Но мы не можем использовать его при загрузке в CRAN (согласно постановлению сопровождающих CRAN, которые считают C ++ 11 «непереносимым» на данном этапе — пожалуйста, обращайтесь к ним, а не к нам, что вас раздражает).

Следовательно, это в настоящее время «запрещено». Есть немного обнаружения в RcppCommon.h и мы определяем HAS_CXX0X, Но мы действительно не написали код для этого, поскольку мы не можем (пока) в предыдущем абзаце.

Так что, если вы нашли ошибку, пожалуйста, сделайте нам одолжение и сообщите о ней, когда последующие запросы будут отправлены: rcpp-devel список. Воспроизводимый это хорошо, патчи еще лучше 🙂

4

Другие решения

Функции таргетинга кода нового стандарта написаны на Rcpp около 2 лет назад.

Но потом, позже мы поняли, что CRAN не принял -std=c++0x флаг для gcc (или эквивалентные флаги для других компиляторов) и форсирование стандарта C ++ 99, и поэтому мы не можем его реально использовать.

Следовательно, мы в значительной степени не поддерживаем C++11 осведомленный код. Это позор, потому что нам бы очень хотелось, но мы предпочитаем, чтобы нас приняли в CRAN. Поскольку мы не поддерживаем, вероятно, есть много вещей, которые не работают так, как должны.

Эта конкретная проблема, вероятно, легко исправить. И это произойдет, как только мы получим зеленый свет на использование C++11,

5

По вопросам рекламы [email protected]