Итак, я был глубоко погружен в свой код, написав метод стирания для моего класса контейнера, когда я пошел на вызов std::vector::erase
с const_iterator
и, если потерпел неудачу, сильно. Как и для этого человека.
Переход по ссылкам на статус gnu libstdc++ показывает, что эта проблема до сих пор не решена. исправлено (первоначальный вопрос был в начале 2013 года).
Итак, я закодировал ужасный взлом:
#if 1
// horrible hack for gnu libstd++ deficit
// current implementation does not allow erase(const_iterator), so recreate plain iterator
off_t::iterator itx= offsets_.begin() + ( apos.iter() - offsets_.begin() ) ;
#else
// for compliant implementations
auto itx= apos.iter() ;
#endif
Но мне интересно, есть ли #define
, я могу использовать относится к версии libstdc++
. Есть много тестов для версии компилятора, но я не думаю, что версии gcc
будут хорошим индикатором того, когда это будет исправлено, и поскольку clang
использует ту же библиотеку по умолчанию, мне нужно поймать ее в любом случае. . Я взглянул на вывод g++ -E -dM - < /dev/null
, но единственные, которые даже упомянули STD
, не кажутся многообещающими:
#define __STDC_HOSTED__ 1
#define __STDC_IEC_559__ 1
#define __STDC_ISO_10646__ 201103L
#define __STDC_NO_THREADS__ 1
#define _STDC_PREDEF_H 1
#define __STDC_IEC_559_COMPLEX__ 1
#define __STDC__ 1
clang
. - person woolstar   schedule 28.01.2014