# Quantlab 3.1.4162 — structured bindings and a lot more since 4155

**URL:** <https://quantlab.discourse.group/t/quantlab-3-1-4162-structured-bindings-and-a-lot-more-since-4155/125>\
**Category:** Announcements\
**Created:** [June 2, 2026, 5:55am UTC](https://quantlab.discourse.group/t/quantlab-3-1-4162-structured-bindings-and-a-lot-more-since-4155/125 "2026-06-02T05:55:47Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![QuantlabAdmin](https://yyz1.discourse-cdn.com/flex003/user_avatar/quantlab.discourse.group/quantlabadmin/32/10_2.png) [@QuantlabAdmin](https://quantlab.discourse.group/u/QuantlabAdmin)\
**Post date:** [June 2, 2026, 5:55am UTC](https://quantlab.discourse.group/t/quantlab-3-1-4162-structured-bindings-and-a-lot-more-since-4155/125/1 "2026-06-02T05:55:47Z")

</div>

🚀 **Quantlab 3.1.4162 — structured bindings, hardened WebSockets, and a lot more since 4155**

We are excited to round up everything that has landed in **Quantlab** since the 3.1.4155 curve-distribution release. Eight builds later, **3.1.4162** brings a new language feature, a thread-safe WebSocket stack, richer enum and container support, smarter runtime logging, and a healthy batch of fixes.

### Headline: structured bindings (4162)

QLang now supports **structured bindings** — capture a `void` function’s leading `out` arguments directly with `auto [n,q] = f(...)` instead of declaring each output up front and passing it in. Works for any number of `out` parameters, supports partial binding from the left, and (like C++17) requires `auto`.

➡ Full write-up: [Structured bindings in QLang](https://quantlab.discourse.group/t/structured-bindings-for-out-parameters-new-in-4162/124)

### Language & types

- `[]` literal to create an **empty vector or matrix** with deduced type (4160).
- **`map` and `set` constructors** that take vectors (4161).
- **Enum template arguments** , plus `set_enum<>`, `map_enum_*<>` and `map_enum_v_*<>` containers (4160).
- JSON support for enums: `set_enum<>` works with `json.print()` / `json.get_object()`, and a new `PRINT_USE_ENUM_STR` flag prints enums as strings (4159–4160).
- `variant.get_object()` now handles inheritance (4160).
- New compiler **warning for `return null` in a `void` function** (4160).

### WebSockets & binary I/O

WebSocket support has matured fast across the span:

- **Rudimentary low-level WebSocket support** introduced (4156).
- Fixes for **large payloads** and **masking/unmasking** (4158).
- Now **thread-safe** via a dedicated I/O thread — single reader, multiple concurrent writers (4161).

Alongside it, new binary plumbing: `in_stream.read_binary()`, `out_stream.write(blob)`, and `ssl.sha1()` (4156).

### Runtime logging

- `rt` log files now accept naming patterns: **`%p`** (process id), **`%d`** (date — enables daily rotation), and **`%n`** (counter — rotates at 128 MB) (4159).
- Log lines now **include the date** (4160).
- 👉 Quantlab **never removes old `rt` log files** — rotation only ever creates new ones.

### Dev UI

- Scintilla editor updated to **5.6.1** (4161).
- **Interrupt long-running debugger watch-expressions** (4161).
- Warning when adding a **duplicate library file** (4158).
- Option to **not be prompted to save** a modified session (4156).
- More robust when ui-2.4 resets an eval-unit with a parse error (4158).
- Fixed a **find-references-to-function crash** on compile error (4162).

### Fixes & housekeeping

- LLVM backend bumped **21.1.4 → 22.1.3** (4156, 4161).
- `rgb()` is now an inlined intrinsic, enabling constant-propagation (4159).
- Fixed crash on a freestanding empty `[]` vector literal (4161).
- Fixed HTTP responses with a 1xx status incorrectly carrying a body (4157).
- `map_*_int.find()` takes a `not_found` argument, defaulting to `-1` (4156).
- `DRIVER=` is now case-insensitive in the ODBC connection-string hack (4162).
- License tweaks: user + addresses shown in the expiry popup (4158); license check ignores `issue_date` (4161).

* * *

😄 And one for the trivia pile: **4159** shipped tagged _Version pi!_ — 3.14159.

**Quantlab 3.1.4162** is available now. ➡ Upgrade today to pick up structured bindings, the hardened WebSocket stack, and every fix above.
