template<int const * pci> struct X {};
extern int const ai[];
X<ai> xi;
int const ai[] = {0,1,2,3};如果我试图用"clang++ -std=c++1z“编译此代码,则会导致错误:
test.cpp:4:3: error:非类型模板参数引用子对象'&ai‘
但这不是次目标。
参数在非类型参数的“(自C++17)”部分中没有列出对extern数组的任何适当限制。
这样的代码在-std=c++14中运行良好。GCC也在c++1z模式下编译它,没有错误:https://godbolt.org/g/K9wZ4g。
是叮当虫吗?还是这段代码错了?
发布于 2017-09-07 00:17:45
是的,这是一个clang bug,得到了clang开发人员的确认,并且已经修复到主干(r311970)中。http://lists.llvm.org/pipermail/cfe-dev/2017-August/055249.html
同时,为了解决这个问题,您需要显式地在声明中写入数组的长度。
extern int const ai[4];https://stackoverflow.com/questions/38147062
复制相似问题