Как я могу передать массив символов конструктору constexpr? - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь манипулировать строкой во время компиляции.
Для этого я создаю класс-оболочку для строки.

Это мой код:

template <size_t nSize>
class strwrapper_t
{
private:
    char m_sInput[nSize] = {}; // init as empty

public:
    constexpr strwrapper_t(const char sInput[nSize])
    { }
};

class strwrapper
{
public:
    template <size_t nSize>
    constexpr static auto create(const char(&sInput)[nSize]) -> strwrapper_t<nSize>
    {
        // message : failure was caused by a read of a variable outside its lifetime
        // message : see usage of 'sInput'
        // error C2131: expression did not evaluate to a constant
        constexpr auto foo = strwrapper_t<nSize>(sInput);

        return foo;
    }
};

int main()
{
    strwrapper::create("foo");

    return 0;
}

Конструктор даже ничего не делает, но моя компиляция не удалась из-за использования sInput. Я не могу понять причину; что я делаю не так?

...