В С++ 11 есть очень удобная функция, называемая сырыми строковыми литералами, которые представляют собой строки без escape-символов. И вместо этого:
  regex mask("\\t[0-9]+\\.[0-9]+\\t\\\\SUB");
Вы можете просто написать это:
  regex mask(R"(\t[0-9]+\.[0-9]+\t\\SUB)");
Довольно читаем. Однако обратите внимание на дополнительную скобку вокруг строки, которую нужно разместить, чтобы определить строковый литерал.
Мой вопрос: зачем нам даже нужны эти? Для меня это выглядит довольно уродливо и нелогично. Вот минусы, которые я вижу:
- Дополнительная многословие, в то время как вся функция используется, чтобы сделать литералы более компактными
- Трудно различить тело буква и определяющие символы
То, что я имею в виду под жестким отличием:
"good old usual string literal"
 ^-    body inside quotes   -^
R"(new strange raw string literal)"
   ^- body inside parenthesis  -^
И вот про:
-  Больше гибкости, больше символов доступно в сырых строках, особенно при использовании с разделителем: "delim( can use () here )delim"
Но, если вам нужна большая гибкость, у вас есть старые хорошие сменные строковые литералы. Почему стандартный комитет решил загрязнить содержимое каждого необработанного строкового литерала этими абсолютно ненужными скобками? В чем причина этого? Какие плюсы я не упоминал?
