Новая определяемая пользователем буквальная концепция в С++ предлагает некоторые очень интересные применения строковых литералов, например:
"Goodbye %s world"_fmt("cruel");
"Goodbye %s world"_fmt(123); // Error: arg 1 must be convertible to const char*
R"(point = \((\d+), (\d+)\))"_re; // Builds DFA at compile-time.
typedef table<
    column<"CustId"_name   , std::string>,
    column<"FirstName"_name, std::string>,
    column<"LastName"_name , std::string>,
    column<"DOB"_name      , date       >
> Customer;
Однако, когда я строю эти типы конструкций в gcc, например:
template <char... Chars> Name<Chars...> operator "" _name() {
    return Name<Chars...>();
}
auto a = 123_name;    // OK
auto b = "abc"_name;  // Error
Я получаю следующую ошибку:
…unable to find string literal operator ‘operator"" _name’ with ‘const char [4]’, ‘long unsigned int’ arguments
Отчитываясь, я предполагаю, что форма вариационного шаблона недоступна для UDL, полученных из строковых литералов.
- Действительно ли это, что строковые литералы не могут быть решены с использованием формы вариационного шаблона?
 - Если да, то кто-нибудь может понять, почему такая полезная форма UDL была оставлена вне стандарта?