Стандарт C++11 привнес в язык такую вещь, как пользовательские литералы
[1]. Конкретно — дюжину вариантов для определения оператора
"", добавляющих небольшой синтаксический сахар, всех, за исключением одного — шаблонного варианта:
template <char...> type operator "" _op();
Отличается этот вариант тем, что он не просто дает альтернативный вариант вызова функции с помощью суффикса, а позволяет определить свои правила парсинга передаваемого аргумента на этапе компиляции, расширяя тем самым возможности компилятора.
Например:
auto x = 10001000100011001001001010001000_b;
Однако при разработке стандарта было допущено небольшое упущение — шаблонный вариант пользовательского литерала позволяет работать только с числовыми аргументами, несмотря на то, что парсинг их осуществляется посимвольно.
Такое упущение, конечно же, не могло остаться не замеченным, и на этапе согласования стандарта C++14 было предложено решение для строковых аргументов
[2]
template <typename CharT, CharT ...String> type operator "" _op();
В скором времени было реализовано в компиляторах GCC
[3] и clang (GNU extension). Однако в финальную редакцию стандарта C++14 так и не попало. Впрочем, не будем отчаиваться, есть надежда, что нас обрадует C++17. А пока посмотрим, как можно будет применять новый тип пользовательских литералов.