У меня относительно простой вариант использования: я хочу связать черту с классом, который будет возвращать некоторую определяемую пользователем строку, а именно некоторый определяемый пользователем идентификатор регистрации. Поскольку эти регистрации должны быть определены во время компиляции, я хотел бы, чтобы это было constexpr, поэтому я написал что-то вроде следующего:
template <typename T>
struct ClassRegistration
{
static constexpr std::string_view
Name();
};
template <>
struct ClassRegistration<int>
{
static constexpr std::string_view
Name()
{
return std::string_view{ "int" };
}
};
Все работает нормально, но поскольку string_view на самом деле не владеет своим буфером, мне интересно, гарантированно ли он будет безопасным, что я имею в виду не просто висящий указатель. Из того, что я читал, строковые литералы гарантированно имеют время жизни столько же, сколько и сама программа (из этого SO Время жизни строкового литерала, возвращаемого функцией).
Следовательно, безопасно и уместно ли такое использование string_view?
static constexpr
переменные в области класса неявноinline
, поэтому здесь не должно применяться. - person HolyBlackCat   schedule 04.06.2020