对静态 const 成员的大小进行静态断言

Static assert on size of static const member

我正在尝试对静态常量 unordered_map 成员的大小进行静态断言。但是我收到一条错误消息,指出静态断言的非 const 条件。有人可以帮忙吗?

#include<unordered_map>
#include<string>

using namespace std;    

class A{
    public:
    static const unordered_map<string,string> strMap;
};

const unordered_map<string,string> A::strMap ={{"key","value"}};

int main() {
static_assert(A::strMap.size() == 1, "sizes don't match");
}

编辑:根据评论,我想澄清一下,以下代码工作正常(它使用数组而不是映射):

#include<unordered_map>
#include<string>

using namespace std;    

class A{
    public:
    static const pair<string,string> strMap[];
};

const pair<string,string> A::strMap[] ={{"key","value"}};

int main() {
//static_assert(sizeof(A::strMap)/sizeof(A::strMap[0]) == 2, "sizes don't match");  Fails to compile
static_assert(sizeof(A::strMap)/sizeof(A::strMap[0]) == 1, "sizes don't match"); //Compiles fine
}

不能这样做。你需要 constexpr std::unordered_map 为此,这是不可能的,因为它的构造函数不是 constexpr。当然,没有 class 分配内存(unordered_map 属于这种类型)可以声明它是构造函数 constexpr。