Путь к 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, использует похожие конструкции