General Utility Library for C++17 25.4.1
Release Notes

GUL17 releases follow a calendar-oriented versioning scheme with a version number of the form YY.M.minor where YY stands for the last two digits of the year, M is the number of the month, and minor is a minor version number that starts from zero for each release in that month.

For instance, the first release in March 2025 was called 25.3.0, the second could have been called 24.3.1. This is not semantic versioning.

GUL17 Versions

UNRELEASED

  • Add gul17::null_safe_string(const char*) and gul17::null_safe_string_view(const char*). The new functions construct a string or string_view from a null-terminated C string and are safe against null pointers.
  • Allow gul17::join() on ranges of string-like types that do not have a size() member function (e.g. const char*).
  • Add gul17::join() overloads for joining ranges of elements with a custom string conversion function.
  • Reintroduce gul17::OverloadSet. This class template allows creating an overload set from an arbitrary number of function objects. It was already part of GUL14 and is now included in an updated version with a C++17 template argument deduction guide.

Version 25.4.0

  • Add gul17::safe_string_view(). The function constructs a string_view from a char pointer and a length. It is safe against null pointers and non-null-terminated strings.

Version 25.3.0

  • Initial release of GUL17. Compared to GUL14, backports of C++17 standard library features (e.g. string_view, optional) are removed, and the build system is simplified.

GUL14: 2.x Versions

Version 2.13.0

Version 2.12.1

Version 2.12.0

  • Released with DOOCS 24.10.0 – 24.12.1
  • Add gul17::to_number<bool>

Version 2.11.2

  • Released with DOOCS 24.3.1 – 24.8.0
  • ThreadPool: Add default constructor for TaskHandle

Version 2.11.1

  • Fix missing ThreadPool symbols in shared library

Version 2.11.0

  • Released with DOOCS 24.3.0
  • Add ThreadPool
  • Add backports of std::invoke, std::invoke_result, std::invoke_result_t, std::is_invocable, and std::is_invocable_r from C++17
  • Improve accuracy of to_number() for certain platforms

Version 2.10.0

Version 2.9.2

Version 2.9.1

  • Fix compilation errors in gul17::variant when compiled with C++17 or MSVC

Version 2.9.0

Version 2.8.0

Version 2.7.1

  • Released with DOOCS 22.10.0 – 23.3.0
  • within_orders(0.0, 0.0, 10) results now in true

Version 2.7

Version 2.6

Version 2.5

Version 2.4

Version 2.3

  • Released with DOOCS 20.6.0 – 20.10.1
  • Allow join() to accept arbitrary containers and add a two-iterator interface

Version 2.2

Version 2.1

Version 2.0

  • Released with DOOCS 20.1.0
  • Rename GUL to GUL17 (applies to namespace, include directory, library name)
  • Make SlidingBufferIterator random access instead of bidirectional

GUL14: 1.x Versions

Version 1.9

Version 1.8

Version 1.7

Version 1.6

Version 1.5

  • Released with DOOCS 19.8.0
  • Add gul17::optional, a backport of std::optional from C++17

Version 1.4

Version 1.3

Version 1.2

Version 1.1

Version 1.0

  • Released with DOOCS 19.5.0
  • First release version of GUL