【发布时间】:2020-08-09 21:37:02
【问题描述】:
我很想知道为什么下面代码中的第二个static_assert 不起作用。看起来即使数组 c 是对 a 的引用,数组的大小也嵌入在类型中,因此它应该在编译时可用。
#include <array>
int main()
{
std::array<int,2> a = {1,2};
std::array<int,2> b = {2,3};
std::array<int,2>& c = a;
static_assert(a.size() == b.size(), "a.size==b.size"); // ok size of array is compile time constant
static_assert(c.size() == a.size(), "c.size==a.size"); // compiler error "static_assert expression is not an integral constant expression"
}
【问题讨论】:
-
这能回答你的问题吗:stackoverflow.com/questions/28614591/…
-
因为
a不是常量表达式 -
我现在很感兴趣为什么
std::declval<decltype(c)>().size()可以与 MSVC 一起使用,但不能与 clang 或 gcc 一起使用。
标签: c++ arrays static-assert stdarray