Итак, я был глубоко в глубине своего кода, написав метод стирания для своего класса контейнеров, когда я пошел звонить по телефону std::vector::erase
с const_iterator
и, если он сильно не удался. Как и для this person.Как проверить версию libstdC++
По ссылкам на gnu libstdc++ status показано, что этот вопрос все еще не исправлен (исходный вопрос был в начале 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
[libstdC++ website] (http://gcc.gnu.org/libstdc++/) говорит: «* libstdC++ - v3 разработан и выпущен как часть GCC, отдельные снимки больше не доступны. *". Поэтому проверка версий GCC - это, вероятно, то, что вы должны делать. – Praetorian
Я, который все еще оставляет меня на крючке, если я собираюсь с 'clang'. – woolstar