Есть ли причина, по которой строковые литералы не могут иметь внешнюю связь?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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