在 std::optional 的 noexcept 说明符中引用 initializer_list

Reference to initializer_list in noexcept specifier of std::optional

我对此有疑问code:

    explicit constexpr
    optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args)
    noexcept(is_nothrow_constructible_v<_Tp, initializer_list<_Up>&,
                        _Args...>)
    : _Base(std::in_place, __il, std::forward<_Args>(__args)...) { }

这里为什么要引用?初始化列表作为值传递给 std::optional。我想这可能与它在这种情况下是一个命名参数有关,但我不确定。

当您使用 is_nothrow_constructible 和其他各种类型特征时,有一个约定,即左值引用类型 T& 表示“类型 T 的左值”,而非引用类型T 表示“T 类型的右值”。在这种情况下,正在进行测试以查看 _Tp 是否不可构造,因为第一个参数将是 initializer_list<_Up>.[=17 类型的 lvalue =]