Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Artifact ID: | d4f085ae2e3f0392a69bab4e4072e4405af88f58c8847e6782e6f4a497869e3d |
---|---|
Page Name: | Extras |
Date: | 2019-01-01 15:01:57 |
Original User: | luismachuca |
Parent: | f8c6b5a6ca27228b58cfa863d2b4c1ecd2a4b344 (diff) |
Next | 78d143bb9b8be81ca5373a58fbca728a5e97c070e7d9f848e8a08963858d2ead |
Besides the normal features that are activated automatically upon inclusion of the library, as well as the Supplements, there are a number of side-projects that don't count as part of cxxomfort's distribution proper. They are being developed separately and rather than integrate with cxxomfort tightly they just depend on the library as a whole.
The idea is to pick a number of features, proposals or general C++ concepts and implement them separately. There are a number of reasons to tackle these features separately:
- the syntax to implement them is too different to C++'s normal syntax (heavy macros, etc) or is too heavy.
- the feature is more advanced or convoluted and benefits from being decoupled from most cxxomfort internals.
- the feature is heavily compiler-dependent.
- the feature is not standardized yet and/or present only as a proposal.
In order to use these features, they can be cloned or downloaded from their specific repositories.
Last update of this listing: November 2018
List of Extras
- cxxo-literal_affixes - An emulation of C++11's suffix user-defined literals, that also work as normal function objects.
- cxxo-auto - Backporting auto in a limited manner.
- cxxo-static_storage - A storage for types that makes them act as "literal" types like ints: objects are never destructed during the program's lifetime, and references/handles to them are passed around instead.
- cxxo-udl - An implementation of suffix user-defined literals, simpler than the one above.
- cxxo-optional - An implementation of std::optional that works with C++03 without many additions, and keeps most semantics.
- cxxo-variant - An implementation of std::variant that works with C++03 in a limited manner.
- cxxo-any - An implementation of std::any that works with C++03 in a limited manner.
- cxxo-minrange - A minimalistic std::range proposal built around n3350 "A minimal std::range".
- cxxo-tuple_io - Stream output operators for std::tuple .
Descriptions
Auto/Decltype Emulation
Header: cxxomfort/extras/auto.hpp
.
Macro: if enabled, CXXOMFORT_USING_auto
is defined.
This header adds the following macros:
CXXO_AUTO( variablename, expr ) CXXO_DECLTYPE( expr )
The above macros allow for emulation of C++11's new "auto" and "decltype" semantics if the compiler supports an equivalent semantic such as typeof in C++03 mode (as GCC's __typeof__
). Usage is very simple:
typdef std::list<short> SHL_t; // short-list type SHL_t shl; ... CXXO_AUTO (M, shl.size() ); // M is automatically declared as eg.: an unsigned int in this case ... cout<< M<< endl;
In C++11, the macros extend simply to auto variablename = expr
and decltype(expr)
respectively.
In C++03, the macros extend to a compiler-supported "typeof" invocation; if none is available, compilation fails with an error messaage of "typeof not supported
".
Requirements:
- In non-C++11 mode, the compiler must support a keyword like __typeof__.
Known Limitations:
- This feature works in Microsoft C++ ≥ 8.0 thanks to a combination of documented hacks for typeof emulation; however, in this case it can not be used in all the contexts a normal
__typeof__
can, so use with caution. - When in C++03 mode, remember "typeof" intrinsics may not resolve reference types the same way C++11's decltype does.
»Possible Future Features
I'm considering adding some features that are either from C++11 or from current proposals for TR2 / C++2x and that are easy enough and useful enough to have them implemented in this library. No more details at the moment though.
In consideration at the moment of this writing:
- default-value-initialized wrapper (from Boost).
- "degenerate" (primitive type + singular term) proposal.
- begin/end for typesafe enumeration types.
- Fixed-time calculation versions for
equal
,mismatch
and thefind_*
family of algorithms.
- Back to Main Features Documentation.
- Implementation Status for C++ proposals.
- Back to the beginning.