以下代码:
Country countryObj=new Country();
countryObj.setName("India");
countryObj.setPopulation(1000000);
List<String> listOfStates=new ArrayList<String>();
listOfStates.add("Madhya Pradesh");
listOfStates.add("Maharastra");
listOfStates.add("Rajasthan");
countryObj.setListOfStates(listOfStates);
Gson gson = new GsonBuilder()
.serializeNulls()
.create();
// convert java object to JSON format,
// and returned as JSON formatted string
String json = gson.toJson(countryObj);
...同时使用std::array<int, 4> arr1;
std::array<float, arr1.size()> arr2;
和gcc
进行编译,因为std::array::size
被视为clang
。
但以下内容无法使用constexpr
(版本5.3.0 20151204)进行编译:
gcc
对我来说,没有理由这样的代码如果第一个有效则无法编译,但由于我没有找到很多帖子,我不知道它是std::array<std::vector<int>, 4> arr1;
std::array<std::vector<double>, arr1.size()> arr2;
bug还是gcc
分机?
来自clang
的错误(我真的不明白......):
gcc
答案 0 :(得分:21)
我认为这与CWG issue 1684有关。以前,constexpr
要求包括:
constexpr
函数所属的类应为文字类型
并且std::array<std::vector<int>, 4>
不是文字类型,因此其size()
成员函数不会是constexpr
。但是,新的措辞允许非文字类型的constexpr
非静态成员函数,假设这些函数满足constexpr
的所有其他要求(array<T,N>::size()
明确地这样做)。
根据新措辞,这是一个gcc错误。以前以66297提交。