【发布时间】:2016-02-04 22:28:34
【问题描述】:
我想明确说明成员变量的数组大小限制,以防止其他人意外做出愚蠢的更改。以下天真的尝试将无法编译:
struct Foo
{
std::array< int, 1024 > some_array;
static_assert( (some_array.size() % 256) == 0, "Size must be multiple of 256" );
//^ (clang) error: invalid use of non-static data member 'some_array'
};
即使std::array::size 是一个constexpr,我也不能像那样直接使用static_assert,因为函数和我的成员变量都不是静态的。
我想出的解决方案是使用decltype(因为我不想typedef数组)如下:
static_assert( (decltype(some_array)().size() % 256) == 0, "Size must be multiple of 256" );
这看起来像是在默认构造一个 rvalue,我不认为它是一个 constexpr。
为什么会这样?
有没有更简洁的方法来实现静态断言?
【问题讨论】:
-
你的功能对我来说很好,先生 o.o,在 vusal 工作室。
-
(declval<decltype(some_array)>().size() % 256) == 0不起作用?
标签: c++ c++11 clang static-assert stdarray