Я пытаюсь манипулировать строкой во время компиляции.
Для этого я создаю класс-оболочку для строки.
Это мой код:
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
. Я не могу понять причину; что я делаю не так?