This is a implementation of N4562 std::experimental::any (merged into C++17) for C++11 compilers.
It contains a small object optimization for objects with a size of up to 2 words (such as int
, float
and std::shared_ptr
). Storing those objects in the container will not trigger a dynamic allocation.
For a easy to understand documentation, see cppreference, except our namespace is linb
.
You may additionally define the following preprocessor symbols (making the implementation non-standard):
ANY_IMPL_ANY_CAST_MOVEABLE
: This implements a fix proposed in LWG Defect 2509. This will cause the expressionsT x = any_cast<T>(any(T()))
andT x = any_cast<T&&>(any(T()))
to perform a move intox
instead of a copy.ANY_IMPL_FAST_TYPE_INFO_COMPARE
: When checking if twotypeid
are the same, performs just a pointer comparision instead of the actualtype_info::operator==
comparision. Be aware this isn't recommended unless you know what you're doing.