Есть ли причина, по которой строковые литералы не могут иметь внешнюю связь?C++

Программы на C++. Форум разработчиков
Anonymous
Есть ли причина, по которой строковые литералы не могут иметь внешнюю связь?

Сообщение Anonymous »

Основной мотивацией для создания строкового литерала с внешней связью является использование строковых литералов в качестве нетиповых параметров шаблона.

Я бы предположил, что строковый литерал с внешней связью имеющий определение, подобное


строковый литерал, имеющий в префиксе букву e, является строковый литерал с внешней связью.

Код: Выделить всё

template struct S{};
void bar()
{
S s;
}
будет иметь поведение, эквивалентное

Код: Выделить всё

template struct S{};
constexpr char __foo[] = "foo";
void bar
{
S s;
}

Есть ли причина не использовать строковые литералы внешней связи?
Как-то добавляется еще один префикс (например, e"Lorem Ipsum ") сделать строковый литерал имеющим внешнюю связь вредной?

Примечание: уже возможно добиться строки внешней связи, но это ужасно способ делать что-то.

Код: Выделить всё

#include

template
struct hack;

template
struct hack
{
static constexpr char arr[] = {Cs..., '\0'};
};

#define E(str) hack::arr

template struct S{};
S s;  // compiles
Boost использует скрипт Python для генерации реализации BOOST_METAPARSE_STRING, и это ужасно.

Подробнее здесь: https://stackoverflow.com/questions/446 ... al-linkage

Вернуться в «C++»