为什么我不能在 `std::initializer_list` 中使用引用类型

Why I can't use a reference type inside a `std::initializer_list`

当我尝试为包含引用的成员使用初始化列表时,出现以下错误:

no matching function for call to ‘std::vector<const Exp&>::vector(<brace-enclosed initializer list>)’

我已经阅读了几篇相关的帖子,但首先,他们似乎得到了不同的错误;其次,他们限定了引用 "as pointless".

的使用

在不进行哲学讨论的情况下,我真的很想知道是否有可能使下面的示例起作用:

#include <vector>

class Exp {
};

class Integer : public Exp {
public:
  const int value;
  Integer(const int val) : value(val) { }
};

int main() {

  const auto a1 = Integer(1);
  const auto a2 = Integer(2);

  const std::vector<const Exp&> va{a1,a2};
 }

会不会是 vector class 缺少构造函数?非常感谢!

gcc (Ubuntu 5.3.1-14ubuntu2.1) 5.3.1 20160413

[编辑以删除虚假示例]

Although this is not explicitly stated in the standard, attempting to use standard library containers to store non-object types should be regarded as undefined behaviour. See [container.requirements.general],

p1: "Containers are objects that store other objects..."

p4: "... X denotes a container class containing objects of type T..."

等等。

谢谢大家!!!我现在已经确定了这个解决方案:

std::array<const std::reference_wrapper<const Exp>, 2> ae{a1,a2};

我需要进行更多调查,但我认为这会满足我现在的要求。