以下代码在GCC和Clang下编译无警告,并且产生了预期的输出:
#include <initializer_list>
#include <iostream>
constexpr std::initializer_list<std::initializer_list<const char*>> list = {
{"a", "b", "c"},
{"d"}
};
int main() {
for (const auto& outer: list) {
std::cout << "level:\n";
for (const auto& inner: outer) {
std::cout << " " << inner << "\n";
}
}
}
然而,使用MSVC编译器,该程序没有输出任何内容。
根据C++标准,这个程序是有效的吗?这是MSVC的一个错误吗?如果这不是有效的C++代码,为什么GCC或Clang没有发出警告?是否有更好的方法来创建具有可变大小内部列表的constexpr
嵌套列表?
STATUS_ACCESS_VIOLATION
。我可能错了,但我认为这是未定义行为。由于初始化列表在运行时被循环遍历,编译时的地址如何仍然有效?(猜测) - ChrisMM