【发布时间】:2018-07-17 18:45:59
【问题描述】:
考虑以下 MWE (https://godbolt.org/g/aydjpW):
#include <cstdlib>
#include <array>
template<size_t N> constexpr std::array<void*, N> empty_array{};
我的目标是拥有一个大小为N 的数组,其中每个元素都是默认初始化的(在这个MWE 的情况下,一个nullptr)。带有-std=c++11 的 g++ 5.4.0 抱怨
变量模板仅适用于 -std=c++14 或 -std=gnu++14
我不明白为什么。根据http://en.cppreference.com/w/cpp/container/array,array<T, N> 存在于 C++11 和隐式声明的构造函数
按照聚合初始化的规则初始化数组
点击http://en.cppreference.com/w/cpp/language/aggregate_initialization聚合初始化描述的链接,上面写着
如果初始化子句的数量小于 成员或初始化列表完全为空,其余成员 是值初始化的。
因此,我的假设是我上面的代码是有效的 C++11。我在这里缺少什么变量模板以某种方式涉及,这需要 C++14?
【问题讨论】:
-
你不是在声明一个数组,你是在声明一个变量模板
-
我认为你的困惑来自variable这个词的含义。错误消息中的词 variable 不是指 variable number of template arguments。它指的是(全局)变量
empty_array,因为不能在变量前面使用template <...>(C++14 之前)。