mirror of
https://github.com/boostorg/unordered.git
synced 2025-11-02 00:31:37 +01:00
52 lines
2.0 KiB
Plaintext
52 lines
2.0 KiB
Plaintext
[/ Copyright 2011 Daniel James.
|
|
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ]
|
|
|
|
[section:compliance C++11 Compliance]
|
|
|
|
[section:allocator_compliance Use of allocators]
|
|
|
|
* Objects are not constructed using the allocator. The node containing them
|
|
is constructed using the allocator's `construct` function, but then the
|
|
object is constructed in a buffer in that node by calling the constructor
|
|
directly.
|
|
* Similarly the object is destructed by calling its destructor directly, and
|
|
then the allocator's `destroy` method is used to destruct the node.
|
|
* For most compilers `select_on_container_copy` is only detected for an
|
|
exact signature match in the allocator itself - not in a base. There is full
|
|
detection for g++ 4.4 or laster, Visual C++ 2008 or later, Clang and maybe
|
|
other compilers which support SFINAE for expressions.
|
|
* `pointer_traits` aren't used. Instead, pointer types are obtained from
|
|
rebound allocators.
|
|
* /TODO/: Any other defficiences of `allocator_traits` emulation.
|
|
* Pointers of base types are used to store the location of a derived type.
|
|
(/TODO/: I'm not sure if that isn't compliant).
|
|
|
|
[endsect]
|
|
|
|
[section:move Move emulation]
|
|
|
|
Move emulation is implemented using Boost.Move. If rvalue references are
|
|
available it will use them, but if not it uses a close, but imperfect emulation
|
|
and to get the advantage of using movable container elements, you'll need to
|
|
use Boost.Move.
|
|
|
|
* Non-copyable objects can be stored in the containers, but without support
|
|
for rvalue references the container will not be movable.
|
|
* The number of arguments used in emplace is limited to /TODO/.
|
|
* Argument forwarding is not perfect.
|
|
* /TODO/: Constructor call for pairs.
|
|
|
|
[endsect]
|
|
|
|
[section:other Other]
|
|
|
|
* When swapping, `Pred` and `Hash` are not currently swapped by calling
|
|
`swap`, their copy constructors are used.
|
|
* As a consequence when swapping an exception may be throw from their
|
|
copy constructor.
|
|
|
|
|
|
[endsect]
|
|
|
|
[endsect] |