@ T.C. Вы правы, но я не ошибаюсь :). Я не поощрял брать его адрес. Я согласен, что ваше конкретное использование является ловушкой, но хотел бы отметить, что использование такого объекта в общем определении не является неправильным в целом.

тавьте, что у нас есть заголовокfoo.h содержащий следующее:

#ifndef FOO_H_
#define FOO_H_

namespace foo {
constexpr std::string_view kSomeString = "blah";
}

#endif  // FOO_H_

Являетсяfoo::kSomeString гарантированно иметь внутреннюю связь в любой единице перевода, которая включаетfoo.h? Различается ли это между C ++ 11 и C ++ 17?

В проекте стандарта[Basic.link] / 3 говорит

Имя, имеющее область пространства имен, имеет внутреннюю связь, если это имя [...] не встроенной переменной энергонезависимого типа с константным квалификацией, который явно не объявлен как extern и ранее не объявлен как имеющий внешнюю связь [...]

Но я не знаю, еслиconstexpr считается "const-квалифицированным". Стандарт где-то так говорит?

Предполагая, что это гарантированно имеет внутреннюю связь, кажется, что не может быть проблем с ODR для этого использования, верно? (В отличие от того, что говорится вэтот ответ.)

Ответы на вопрос(2)

Ваш ответ на вопрос