Путь к regex_byref_matcher.hpp при использовании xp::sregex::compile

Я заметил, что когда я использую xp:: sregex:: compile в своем коде, строка...\3rdparty\boost-1_58\boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp (с моим локальным путем) появляется в двоичный код, скомпилированный в релизных модах. Есть ли способ удалить это?

1 ответ

Решение

Это, несомненно, когда код использует __FILE__ чтобы получить хорошие сообщения об утверждениях / исключениях.

Единственное место, где Xpressive использует его напрямую, это regex_error.hpp:

#define BOOST_XPR_ENSURE_(pred, code, msg)                                                          \
    boost::xpressive::detail::ensure_(!!(pred), code, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)  \
    /**/

Вы можете легко взломать его, чтобы быть

#include <boost/xpressive/regex_error.hpp>

#undef BOOST_XPR_ENSURE_

#define BOOST_XPR_ENSURE_(pred, code, msg)                                                          \
    boost::xpressive::detail::ensure_(!!(pred), code, msg, BOOST_CURRENT_FUNCTION, "(source-hidden)", __LINE__)  \
    /**/

Иметь ввиду:

  • хак должен идти до того, как любой другой Xpressive включает
  • это ограничит полезность сообщений, если они появятся
  • есть вероятность, что одна из библиотек, от которых зависит Xpressive, использует похожие конструкции
Другие вопросы по тегам