我有以下代码使用constexpr
作为数组大小。
#include <array>
template <size_t size>
constexpr size_t
GetSize(const char(&format)[size])
{
// Iterate over format array and compute a value.
size_t count = 0;
for (size_t i = 0; i < size; ++i)
{
if (format[i] == '%')
{
++count;
}
}
return count;
}
template <size_t size>
constexpr auto
GetArray(const char(&format)[size])
{
constexpr size_t arraySize = GetSize(format);
return std::array<char, arraySize>();
}
int main(int argc, char** argv)
{
static_assert(GetArray("hello").size() == 12, "failed");
}
但是这无法在VS2019下编译并出现以下错误
error C2131: expression did not evaluate to a constant
message : failure was caused by a read of a variable outside its lifetime
message : see usage of 'format'
message : see reference to function template instantiation 'auto GetArray<6>(const char (&)[6])' being compiled
这是编译器错误吗?如果是这样,是否有解决方法?