C++11 Can';在静态断言中不使用constexpr函数

C++11 Can';在静态断言中不使用constexpr函数,c++11,C++11,请告诉我,如果字符串包含所需的符号数,为什么我不能使用constexpr递归函数来静态断言?Constexpr函数应该是一个常量值,但VS2015编译器告诉我表达式的计算结果不是常量(错误C2131) 结果(翻译成英文): 1>d:\cprojects\logo\exchlogo.h(43):错误C2131:表达式未由常量定义 1> d:\cprojects\logo\exchlogo.h(43):注意:故障是由解析分配操作引起的 1> d:\cprojects\logo\exchlogo.h(

请告诉我,如果字符串包含所需的符号数,为什么我不能使用constexpr递归函数来静态断言?Constexpr函数应该是一个常量值,但VS2015编译器告诉我表达式的计算结果不是常量(错误C2131)

结果(翻译成英文):

1>d:\cprojects\logo\exchlogo.h(43):错误C2131:表达式未由常量定义
1> d:\cprojects\logo\exchlogo.h(43):注意:故障是由解析分配操作引起的
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+26,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+25,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+24,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:_local_u=I,I..8:1-1;NI,NI..8:1-1”)+23,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:_local_u=I,I..8:1-1;NI,NI..8:1-1”)+22,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:跳过的中间调用:16(/constexpr:backtrace)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+5,0)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:_local_u=I,I..8:1-1;NI,NI..8:1-1”)+4,0)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:_local_u=I,I..8:1-1;NI,NI..8:1-1”)+3,0)时)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+2,0)
1> d:\cprojects\logo\exchlogo.h(43):注意:在计算“请求的变量(((“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”)+1,0)
1> d:\cprojects\logo\exchlogo.h(45):注意:在计算“请求的变量”时(“GETVARS:u local_u=I,I..8:1-1;NI,NI..8:1-1”,0)”
1> d:\cprojects\logo\exchlogo.h(45):错误C2131:表达式未由常量定义
1> d:\cprojects\logo\exchlogo.h(43):注意:故障是由解析分配操作引起的

<代码> >看来,VS2015是不可能的。我删除了我的答案。可能有其他选择吗?如果它不支持它,我会考虑升级到VS2019或者删除<代码> CONTXPRPR <代码>要求。
constexpr const char* GetRequestStr = "GETVARS:_local_=I,I..8:1-1;NI,NI..8:1-1";

constexpr unsigned RequestedVars(const char* str, unsigned cnt=0){
    return str[0] == 0 ? cnt+1 : RequestedVars(str+1, str[0] == ';' ? ++cnt : cnt);
};
static_assert(RequestedVars(GetRequestStr) == 2, "Must be 2"); // C2131 here
1> d: \ cprojects \ logo \ exchlogo.h (43): error C2131: expression not defined by constant
1> d: \ cprojects \ logo \ exchlogo.h (43): note: the failure was caused by parsing an assignment operation
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 26, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 25, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 24, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 23, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 22, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: skipped intermediate calls: 16 (/ constexpr: backtrace <NUMBER>)
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 5, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 4, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 3, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 2, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (43): note: when calculating "RequestedVars ((" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 ") + 1, 0)"
1> d: \ cprojects \ logo \ exchlogo.h (45): note: when calculating "RequestedVars (" GETVARS: _local_ = I, I..8: 1-1; NI, NI..8: 1-1 " , 0) "
1> d: \ cprojects \ logo \ exchlogo.h (45): error C2131: expression not defined by constant
1> d: \ cprojects \ logo \ exchlogo.h (43): note: the failure was caused by parsing an assignment operation