Нечувствительное к регистру совпадение с Boost Xpressive

Я просто не могу получить regex_match функция для поиска регистронезависимых совпадений. Даже если boost::xpressive::regex_constants::icase определяется, и я использую приведение (так что нет никакой двусмысленности icase метод Xpressive), я получаю ошибку компиляции (VS2010):

ошибка C2440: "приведение типа": невозможно преобразовать из "const boost::xpressive::detail::modifier_op" в "boost::xpressive::regex_constants::match_flag_type"

Некоторый код для воспроизведения:

#include <stdio.h>
#include <boost/xpressive/xpressive.hpp>

int main(){
    std::string str("FOO");
    boost::xpressive::sregex re = boost::xpressive::sregex_compiler().compile("foo");
    bool result = regex_match(str,re,(boost::xpressive::regex_constants::match_flag_type)boost::xpressive::regex_constants::icase);
    if(result){
        std::cout << "Match!";
    }else{
        std::cout << "No match!";
    }
    return 0;
}

Вы знаете, в чем может быть проблема?

1 ответ

Решение

Попробуй использовать

boost::xpressive::sregex re = boost::xpressive::sregex_compiler().
compile("foo", boost::xpressive::icase);

syntax_options_type (то есть boost::xpressive::regex_constants::icase_) не является match_flag_type (3 аргумента для regex_match должен иметь этот тип).

Другие вопросы по тегам