Представьте, что у нас есть заголовок foo.h
, содержащий следующее:
#ifndef FOO_H_
#define FOO_H_
namespace foo {
constexpr std::string_view kSomeString = "blah";
}
#endif // FOO_H_
Является foo::kSomeString
гарантированным наличие внутренней связи в любой единицы перевода, которая включает foo.h
? Это зависит от С++ 11 и С++ 17?
В черновом проекте [basic.link]/3 говорится
Имя, имеющее область пространства имен, имеет внутреннюю привязку, если это имя [...] не-встроенная переменная типа энергонезависимого типа с константой, которая не является явно объявленным extern или ранее объявлена как имеющая внешнюю связь [...]
Но я не знаю, считается ли constexpr
как "const-qualified". Говорит ли стандарт где-то?
Предполагая, что у этого гарантируется внутренняя связь, похоже, что с ODR не может быть проблем с этим использованием, верно? (В отличие от того, что он говорит в этом ответе.)