静态断言静态const成员的大小

时间:2015-11-24 17:21:48

标签: c++11 constexpr static-assert

我试图将静态断言放在静态const unordered_map成员的大小上。但我得到一个错误,说静态断言的非常量条件。有人可以帮忙吗?

#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
}

1 个答案:

答案 0 :(得分:3)

不能这样做。你需要query?.whereKey("location", nearGeoPoint: geoPoint!, withinKilometers: Double(distanceSearch!)!) std :: unordered_map,这是不可能的,因为它的构造函数不是constexpr。当然,没有任何分配内存的类(constexpr属于这种类型)可以声明它的构造函数constexpr。