Я обнаружил странное несоответствие между 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. Любые идеи, кто-нибудь?
Мы любим C ++ 11 и не можем дождаться его использования. Но мы не можем использовать его при загрузке в CRAN (согласно постановлению сопровождающих CRAN, которые считают C ++ 11 «непереносимым» на данном этапе — пожалуйста, обращайтесь к ним, а не к нам, что вас раздражает).
Следовательно, это в настоящее время «запрещено». Есть немного обнаружения в RcppCommon.h
и мы определяем HAS_CXX0X
, Но мы действительно не написали код для этого, поскольку мы не можем (пока) в предыдущем абзаце.
Так что, если вы нашли ошибку, пожалуйста, сделайте нам одолжение и сообщите о ней, когда последующие запросы будут отправлены: rcpp-devel
список. Воспроизводимый это хорошо, патчи еще лучше 🙂
Функции таргетинга кода нового стандарта написаны на Rcpp
около 2 лет назад.
Но потом, позже мы поняли, что CRAN
не принял -std=c++0x
флаг для gcc (или эквивалентные флаги для других компиляторов) и форсирование стандарта C ++ 99, и поэтому мы не можем его реально использовать.
Следовательно, мы в значительной степени не поддерживаем C++11
осведомленный код. Это позор, потому что нам бы очень хотелось, но мы предпочитаем, чтобы нас приняли в CRAN. Поскольку мы не поддерживаем, вероятно, есть много вещей, которые не работают так, как должны.
Эта конкретная проблема, вероятно, легко исправить. И это произойдет, как только мы получим зеленый свет на использование C++11
,