Я бы предположил, что строковый литерал с внешней связью имеющий определение, подобное
строковый литерал, имеющий в префиксе букву 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
Подробнее здесь: https://stackoverflow.com/questions/446 ... al-linkage
Мобильная версия