https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100475
Bug ID: 100475
Summary: semiregular-box's constructor uses wrong
list-initialization
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: hewillk at gmail dot com
Target Milestone: ---
The specialization of semiregular-box's constructor in ranges#L166:
template<typename... _Args>
requires constructible_from<_Tp, _Args...>
constexpr explicit
__box(in_place_t, _Args&&... __args)
noexcept(is_nothrow_constructible_v<_Tp, _Args...>)
: _M_value{std::forward<_Args>(__args)...}
{ }
uses the wrong list-initialization, which will incorrectly construct the vector
with the initializer list in the following example:
#include <iostream>
#include <ranges>
#include <vector>
int main() {
std::ranges::single_view<std::vector<int>> single(std::in_place, 100, 0);
std::cout << single.begin()->size() << "\n";
}
https://godbolt.org/z/c88o3WzYP