std C++ 11 library impementation with extra features using only C++ 98 and POSIX threads
MIT License
Branch | Appveyor | Github | Codecov |
---|---|---|---|
tests (development) | |||
master |
|
C++ 11 standard library implementation with extra features using C++98 only and POSIX threads. Minimum ugly preprocessor macro and no configuration files. The library itself is built on top of C++ standard library distributed with your compiler and just extends it with C++11 features.
glibc
and pthread
)Wiki for more details.
Q: Why not Boost?
A:
countof
f.e.) be in one place with power of C++ 11 threads handling and template-programming.stdex::nullptr_t
STATIC_ASSERT
macrostdex_assert
macro (as equivalent to cassert
macro)name | purpose | implemented | is final |
---|---|---|---|
<typeindex> |
stdex::type_index | 100% | maybe |
<type_traits> |
Compile-time type information | 70% | no |
<functional> |
Function objects, Function invocations, Bind operations and Reference wrappers | no | no |
<chrono> |
C++ time utilities | 100% | yes |
<initializer_list> |
stdex::initializer_list class template | no and never | yes |
<tuple> |
stdex::tuple class template | no | no |
name | purpose | implemented | is final |
---|---|---|---|
<scoped_allocator> |
Nested allocator class | no | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<cstdint> |
fixed-size types and limits of other types | 99% | maybe |
<cinttypes> |
formatting macros, intmax_t and uintmax_t math and conversions | no | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<system_error> |
defines stdex::error_code, a platform-dependent error code | 100% | yes |
name | purpose | implemented | is final |
---|---|---|---|
<cuchar> |
C-style Unicode character conversion functions | no | maybe |
<string> |
stdex::basic_string, stdex::stoi, stdex::to_string etc. | 50% | no |
name | purpose | implemented | is final |
---|---|---|---|
<array> |
stdex::array container | no | maybe |
<forward_list> |
stdex::forward_list container | no | maybe |
<unordered_set> |
unordered associative set containers |
no | maybe |
<unordered_map> |
unordered associative map containers |
no | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<iterator> |
Range iterators | 100% | yes |
name | purpose | implemented | is final |
---|---|---|---|
<algorithm> |
Algorithms that operate on ranges | 100% | yes |
name | purpose | implemented | is final |
---|---|---|---|
<random> |
Random number generators and distributions | no | maybe |
<ratio> |
Compile-time rational arithmetic | 99% | maybe |
<cfenv> |
Floating-point environment access functions | no | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<sstream> |
stdex::basic_stringstream, stdex::basic_istringstream, stdex::basic_ostringstream class templates and several typedefs | 30% | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<regex> |
Classes, algorithms and iterators to support regular expression processing | no | maybe |
name | purpose | implemented | is final |
---|---|---|---|
<atomic> |
Atomic operations library | no | no |
name | purpose | implemented | is final |
---|---|---|---|
<thread> |
stdex::thread class and supporting functions | 90% | no |
<mutex> |
mutual exclusion primitives | 90% | no |
<future> |
primitives for asynchronous computations | no | maybe |
<condition_variable> |
thread waiting conditions | 100% | yes |
Not all features of C++ 11 can be implemented without compiler support so I have no plans to include such features in the library.
The library is portable for any compiler that supports C++98 but as we all know there are lots of different implementations of std library in even major compilers so this library is tested with:
Borland C++ Builder 6.0
Updt4;qcc
(just a wrapper over gcc
in QNX)g++
3.4, 4.4.2, 4.4, 4.6;g++
4.8, 4.9, 5.0 with c++98 option;clang
3.5, 5.0 with c++98 option;clang-900.0.37
with c++98 option (Mac OS);Visual Studio
2008, 2010, 2013, 2015, 2017;...and that's it. If you use other compilers and decide to include this library in your project there is no guarantee that it will compile without errors. In case you will be able to fix the errors without breaking existing code for already supported compilers I would really appreciate your pull requests.
For the C++ threads (mutexes, threads) I'm using POSIX threads implementation. There is one for Windows platform and definitely should be one for every POSIX-friendly platform.
The library is in development so no backward compatibility guaranteed with previous versions of stdex. But one thing for sure: it will be more and more standard in the way of std library for C++ 11.
Build process is simple:
build_lib.sh
script (works with g++
and clang
if environment variable $COMPILER
is set to compiler name, f.e. to clang++-3.5
) or build by yourself static library from stdex/src
directory sources.build_lib.bat
script that works with Visual Studio's cl
if environment variables are set by v{s/c}vars{32/64/all}.bat
(vcvars32.bat
, vsvars32.bat
etc.) script that is in your Visual Studio distributive;build_lib_bcc32.bat
script for Borland C++ Builder 6.0 Updt4 bcc32
build;stdex/src
and pthreads-win32
directories sources.build_lib_qnx.sh
(using qcc
compiler) or build by yourself the static library from stdex/src
directory sources (do not forget to link with stdlib
library).build_lib.sh
script (works with clang if environment variable $COMPILER
is set to compiler name, f.e. to clang++-3.5
) or build by yourself static library from stdex/src
directory sources.In your project:
include sources of the library or link with prebuild static library (.a
/.lib
file, f.e. libstdex.a
/stdex.lib
)
link with system libraries for POSIX-threads and real-time clocks:
librt.lib
and libpthread.lib
for UNIX;pthreads-win32
sources then you have no need to link with pthreads anymore - it's already in stdex.lib
);m.lib
for QNX 6.x.x;libpthread.lib
for Mac OS;enjoy
example script build for Ubuntu (with g++
installed):
COMPILER=g++
$COMPILER main.cpp -L./stdex/lib/ -lstdex -lrt -lpthread -o "./bin/main"
example script build for Windows (with Visual Studio 2008 and Windows Kit 8.1 installed):
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
set LIB=%LIB%C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\;
set INCLUDE=%INCLUDE%;%cd%\pthread;
cl -EHsc -Fo.\obj\main.obj -c ".\main.cpp"
cl .\obj\main.obj stdex.lib -Fe.\bin\main.exe -link -LIBPATH:.\stdex\lib
example script build for Windows (with Borland C++ Builder 6.0 Updt4):
bcc32 -w-inl -w-ccc -tWM -Q -n.\obj\ -I%cd%\pthread\ -c ".\main.cpp"
bcc32 -w-inl -w-ccc -tWM -Q -L.\stdex\lib\ -lap -I%cd%\pthread\ -e.\bin\main.exe stdex.lib cw32mt.lib .\obj\main.obj
example script build for QNX 6.x.x (with qcc
installed):
COMPILER=qcc
$COMPILER main.cpp -L./stdex/lib/ -lstdex -lm -o "./bin/main"
example script build for Mac OS (with clang
installed):
COMPILER=clang++
$COMPILER main.cpp -L./stdex/lib/ -lstdex -lpthread -o "./bin/main"
visit https://github.com/oktonion/stdex for the latest version of stdex library