https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117508
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
namespace std
{
/// initializer_list
template<class _E>
class initializer_list
{
public:
using size_type = decltype(sizeof(1));
private:
const _E* _M_array;
size_type _M_len;
// The compiler can call a private constructor.
constexpr initializer_list(const _E* __a, size_type __l)
: _M_array(__a), _M_len(__l) { }
public:
constexpr initializer_list() noexcept
: _M_array(0), _M_len(0) { }
// Number of elements.
constexpr size_type
size() const noexcept { return _M_len; }
// First element.
constexpr const _E*
begin() const noexcept { return _M_array; }
// One past the last element.
constexpr const _E*
end() const noexcept { return begin() + size(); }
};
}
struct V {
V(const char*) { }
~V() { }
};
struct X {
X(std::initializer_list<V>) { }
};
void test01() {
X x { {"E"}, {"E"}, {"T"}, {"T"} };
return;
}
int main() {
test01();
return 0;
}
This only jumps to the closing brace once:
Temporary breakpoint 1, main () at 83709.cc:51
51 test01();
test01 () at 83709.cc:48
48 }
46 X x { {"E"}, {"E"}, {"T"}, {"T"} };
47 return;
48 }
Continuing.