All notable changes to stdex library project will be documented in this file.
visit https://github.com/oktonion/stdex for the latest version of stdex library
- CodeQL build for code quality checks
- LGTM code quality checks
- QNX build script
- correct integral constant identification
- silently failing for
stdex::..._clock::now
if OS failed to provide correct time
- added missing includes
stdex::nullptr_t
implementationstdex::this_thread::sleep_for
implementation handling for OS time shifts
- futures implementation
- move semantics emulation
- function implementation
- polluting global namespace with
strerror_s
andstrerrorlen_s
symbols, sorry for that
- stupid MS visual studio warnings
- pthread implementation for Windows updated
stdex::error_category
string messages now thread-safe when possible (detecting and using thr-safe strerror_s if possible)- build scripts for windows version of library
stdex::thread
handle now is initialized properly to default value
- futures implementation
- move semantics emulation
- function implementation
- GitHub actions as main CI pipeline for tests
- extra headers includes
- pthreads library for windows to latest version
- checks for
nullptr
be compatible withNULL
provided by compiler
- some warnings for GCC
- comparison detection for int type nullptr emulation
- nullptr as enum implementation with valid sizeof(enum) == sizeof(void*)
- Visual Studio 2015 bug for
stdex::is_member_pointer
detection nullptr
feature detection
- futures implementation
- move semantics emulation
- function implementation
- pthreads-win32 library with fresh fixes (affects Windows only)
- dynamic load of 'ntdll.dll' (no more need for 'ntdll.lib' linkage)
- when using
big_int
as internal implementation forstdex::chrono::system_clock
andstdex::chrono::steady_clock
duration counter define duration asstdex::chrono::nanoseconds
- static analysis warnings about uninitialized variables and negating unsigned values
stdex::condition_variable::wait_for
-
<mutex>
header: -
stdex::try_lock
-
stdex::lock
-
<ctime>
header: -
stdex::timespec
-
STDEX_CLOCKS_PER_SEC
asCLOCKS_PER_SEC
-
big integer implementation for
stdex::chrono
: -
- more precise clocks for compilers without 64 bit integers
-
- more precise sleeps for all time-dependant functions and classes (like
stdex::timed_mutex
and such)
- more precise sleeps for all time-dependant functions and classes (like
-
- more precise ratio arithmetics for compilers without 64 bit integers
-
moar tests to the god of tests
- trying to be more clear why
std::terminate
has been raised (affects DEBUG mode only) stdex::condition_variable
correct waitable functionsstdex::chrono::high_resolution_clock
defined in compile-time as most accurate clock fromstdex::chrono::system_clock
andstdex::chrono::steady_clock
- sync sleep clocks with
stdex::chrono
clocks stdex::is_const
is now correcty detecting functions as non-const for bugged compilersstdex::is_volatile
is now correcty detecting functions as non-volatile for bugged compilersstdex::is_function
is now correcty detecting functions
-
<chrono>
header: -
stdex::chrono
clocks in general now are more precise and correct
-
stdex::chrono::system_clock::is_steady
andstdex::chrono::steady_clock::is_steady
flags are now correct for Windows
-
stdex::chrono::system_clock
now converts to and fromtime_t
properly
-
stdex::chrono::duration
incorrect constructor fix
-
<system_error>
header: -
stdex::error_code
andstdex::error_condition
have now proper comparison operators. That fix restrict compiler from using this comparison operators for user-provided types.
-
stdex::is_error_code_enum
overload forstdex::errc
is now correct
-
stdex::is_enum
detection for integral types
-
stdex::error_code
construction
-
<ctime>
header: -
- correct
swprintf
detection - fixing compiler specific implementations ofswprintf
- correct
-
qv-qualified array compiler bug
-
namespace _stdex_ADL
for ADL hack for bugged compilers (pollutes global scope but gets job done) -
<mutex>
header: -
stdex::timed_mutex
andstdex::recursive_timed_mutex
implemented
-
moar tests to the god of tests
-
<mutex>
header: -
- throw exceptions if underlying pthread implementation is capable to detect errors (less bugs in production, more exceptions to handle, yeeeah!)
-
all build and test run scripts now povide more clear output
-
stupid MS defines for
max
andmin
breaking valid code -
<thread>
header: -
stdex::this_thread::sleep_for
bug with sleep interval less than expected (sync OS clocks used in<thread>
with OS clocks ofstdex::chrono::system_clock
andstdex::chrono::steady_clock
)
-
- bugged compilers problems with
stdex::thread
functor argument params deduction
- bugged compilers problems with
-
<chrono>
implementation: -
- removed 1500ms time shift for MacOS implementation of
chrono
, this fix affectsstdex::chrono::system_clock::now()
,stdex::chrono::steady_clock::now()
,stdex::condition_variable::wait_for()
, all waitable mutexes etc.
- removed 1500ms time shift for MacOS implementation of
-
<chrono>
header: -
- correct constructors set for
stdex::chrono::duration
- correct constructors set for
-
- disabled
operator%
for floating pointstdex::chrono::duration::rep
- disabled
-
- using correct trait
stdex::chrono::treat_as_floating_point
for detecting floating pointstdex::chrono::duration::rep
- using correct trait
-
<system_error>
header: -
- correct construction for custom error codes with
stdex::make_error_code
using ADL hack for bugged compilers
- correct construction for custom error codes with
-
- correct construction for custom error conditions with
stdex::make_error_condition
using ADL hack for bugged compilers
- correct construction for custom error conditions with
-
<type_traits>
header: -
stdex::is_function
trait detection for different calling conventions
-
stdex::is_union
detection now includes more compiler intrinsics thus making it more accurate for distinguishing between class and union
-
<thread>
implementation: -
stdex::this_thread::sleep_for
is implemented as steady (monotonic) timer if available thus providing more precise sleep interval
-
improved threads blocking times
-
<chrono>
implementation: -
stdex::chrono::system_clock::is_steady
andstdex::chrono::steady_clock::is_steady
are now correct
-
- using more precise and correct clocks if provided by OS (f.e.
CLOCK_MONOTONIC_RAW
for newer Linux) affectsstdex::chrono::system_clock::now()
andstdex::chrono::steady_clock::now()
- using more precise and correct clocks if provided by OS (f.e.
- threads native handle is determined as invalid now for empty
stdex::thread
object
- includes now are consistent
- threads for 4+ args typo
- tabs to spaces in all header files
- C++ 98 standard support detection for GCC
- warnings for possible overflow in
<ratio>
- warnings for using deprecated header
<strstream>
- compiler bug that was leading to
std::out_of_range
exception instdex::stol
,stdex::stoul
for perfectly valid u/long maximum, minimum value strings - new lines at EOF for all '.hpp'
- static asserts in constructors for
<system_error>
to forbid invalid constructor calls <algorithm>
header:-
- SFINAE checks for
std::copy_n
existence
- SFINAE checks for
<cstdint>
header:-
- hack for integral constant detection for Visual Studio 2019
- Borland Builder build script changed (removed extra cmd line arguments)
<string>
header:-
- removed warnings for signed/unsigned casts in
itol
,itoul
etc.
- removed warnings for signed/unsigned casts in
<typeindex>
header was missing so I found it in this release- internals of chrono are now carefully hidden
- updated UNIX scripts to correct line endings
<typeindex>
header:-
type_index
class
-
type_info
defined instdex
namespace
- clean internal macros
-
to_string
andto_wstring
now accept static arrays -
build script for Borland C++ Builder compiler
-
<cstdint>
header: -
intmax_t
,uintmax_t
-
int8_t
,uint8_t
-
int16_t
,uint16_t
-
int32_t
,uint32_t
-
int64_t
,uint64_t
-
int_least8_t
,uint_least8_t
-
int_least16_t
,uint_least16_t
-
int_least32_t
,uint_least32_t
-
int_least64_t
,uint_least64_t
-
int_fast8_t
,uint_fast8_t
-
int_fast16_t
,uint_fast16_t
-
int_fast32_t
,uint_fast32_t
-
int_fast64_t
,uint_fast64_t
-
intptr_t
,uintptr_t
All types are only in
stdex
namespace. Type is incomplete or absent if it is not supported.
-
- STDEX_INTMAX_MIN, STDEX_INTMAX_MAX, STDEX_UINTMAX_MAX
-
- STDEX_INT{N}_MIN, STDEX_INT{N}_MAX, STDEX_UINT{N}_MAX
-
- STDEX_INT_LEAST{N}_MIN, STDEX_INT_LEAST{N}_MAX, STDEX_UINT_LEAST{N}MAX
-
- STDEX_INT_FAST{N}_MIN, STDEX_INT_FAST{N}_MAX, STDEX_UINT_FAST{N}_MAX
-
- STDEX_INTPTR_MIN, STDEX_INTPTR_MAX, STDEX_UINTPTR_MAX
-
- STDEX_INTMAX_C(), STDEX_UINTMAX_C(), STDEX_INT{N}_C(), STDEX_UINT{N}_C()
Where {N} is one in 8, 16, 32, 64 (if present). Defines are invalid or absent if type is not supported.
- fixed bugs with
to_string
andto_wstring
for (w)c-strings and (w)stringstream implementation - "fixed"
is_union
implementation with nasty compiler-specific intrinsic (still returnstrue
for classes if compiler has no intrinsic) - changed pthread-win32 submodule dependency to my fork (origin have not been updated since forever)
- predefined types for
ratio
(likeyocto
,milli
,kilo
,exa
etc.) are now incomplete if are not supported (too large or too small) - all build scripts now work correctly
- fixed internal variables names with underscores
<stdint_ex.h>
for<cstdint.hpp>
/<cstdint>
-
<iterator>
header: -
prev
-
next
-
begin
-
end
-
- all of C++ 98 std functions
-
<algorithm>
header: -
all_of
-
any_of
-
none_of
-
find_if_not
-
copy_if
-
copy_n
-
random_shuffle
-
is_partitioned
-
partition_copy
-
is_sorted_until
-
is_sorted
-
minmax
-
minmax_element
-
is_permutation
-
- all of C++ 98 std functions
- fixed lots of micro bugs
- reimplemented
is_enum
andis_union
(unions are still not distinguishable from classes)
is_union
implementation with bug for detecting class as union- Mac OS build added to CI (with xcode9 and clang-900.0.37)
- Mac OS implementation for
thread::hardware_concurrency
and<chrono>
is_enum
implementation
is_class
now returnsfalse
on enums
- rudimentary code for
nullptr
implementation
-
is_array
now detectsT[]
(array with no size) -
nullptr
now is signed as integer and enum (removes Borland C++ Builder 6.0 warning of signed-unsigned comparison) -
build script for Microsoft Visual Studio now works correctly