【问题标题】:field initializer is not constant g++ 4.8.4字段初始值设定项不是常量 g++ 4.8.4
【发布时间】:2016-06-10 23:19:19
【问题描述】:

我尝试在笔记本电脑上使用 g++ 4.8.4 编译以下代码:

#include <algorithm>
#include <iostream>
#include <initializer_list>
#include <tuple>

struct Storage {
  static const int num_spatial_subset = 8;
  static constexpr std::initializer_list<std::initializer_list<double>> vectors{ {0,0,0}, 
      {0,1,0}, 
      {0,0,1}, 
      {1,1,0}, 
      {1,0,1}, 
      {0,1,1}, 
      {1,0,0}, 
      {1,1,1} };
  double storage[num_spatial_subset][vectors.size()];
};


int main()
{
}

我收到了这个错误信息:

error: field initializer is not constant
constexpr std::initializer_list< std::initializer_list<double> > vectors{ {0,0,0}, {0,1,0}, {0,0,1}, {1,1,0}, {1,0,1}, {0,1,1}, {1,0,0}, {1,1,1} };

但是,我在 coliru (g++ 6.1.0) 上复制/粘贴了相同的代码,使用相同的编译参数并且它可以工作。

谁能告诉我怎么了?

谢谢。

【问题讨论】:

  • 我认为 gcc 4.8.4 中的 C++11 支持仍处于试验阶段,如果升级到 gcc 4.9 我认为它应该有更好的工作机会。
  • 鉴于它适用于现代编译器,我不会在旧版本的正确性上投入任何资金。如果您需要支持“古老的”编译器,请不要对现代语言功能抱有幻想。

标签: c++ compilation g++


【解决方案1】:

实际上,正如 Chris 和 Baum 所指出的,更新到 g++ 4.9 修复了它。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2019-04-16
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多