Могу ли я использовать библиотеку регулярных выражений STL для строк char16_t?

#regex #c 11 #stl #char16-t

#регулярное выражение #c 11 #stl #char16-t

Вопрос:

Короче говоря, что изначально неправильно в следующем коде?

 #include <regex>
int main() {
    std::regex_match(u" ", std::basic_regex<char16_t>{u" "});
}
  

Он выдает ошибки с

 $ g   -std=c  17 main.cpp -o main
$ ./main
terminate called after throwing an instance of 'std::bad_cast'
  what():  std::bad_cast
Aborted (core dumped)
  

Подробная информация:

 $ g   --version                                                                                                                                                                                                                                    
g   (GCC) 10.2.0                                                                                                                                                                                                                                               
Copyright (C) 2020 Free Software Foundation, Inc.                                                                                                                                                                                                              
This is free software; see the source for copying conditions.  There is NO                                                                                                                                                                                     
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  

Ответ №1:

Стандартная библиотека C не поддерживает регулярные выражения с char16_t или char32_t в Юникоде. Есть предложение по решению этой проблемы, но его нет в C 20: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0169r0.html