作为常量初始值设定项表达式的一部分,字符串文字转换为 bool 是否有效?

Is a string literal converted to bool valid as part of a constant initializer expression?

enum {
  compile_time_assertion = 1 / ("description" && 1);
};

上面的代码片段是否符合 C11?将字符串文字作为表达式的一部分可能会违反初始化表达式的众多约束之一。

根据上述标准,字符串文字可以用在初始化表达式中。在表达式 "" && 1 中使用字符串文字可能会违反约束:

因此,我得出结论,字符串文字本身可以用作初始化程序中的表达式,但不能用作运算符的操作数 &&

将上述代码片段转换为整数常量表达式的一种简单方法是在字符串文字前放置一个 sizeof

以上推理是否正确?我错过了什么吗?

枚举常量需要“整型常量表达式”(ICE):

The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.

字符串文字的地址(在此上下文中它转换成的地址)不是这样的 ICE。

因此,在您的推理中,您忽略了这样一个事实:无论何时在表达式中使用字符串文字都会转换为其地址。您似乎也错过了 ICE 的定义,它非常严格,特别是比“整数类型的常量表达式”更严格。