| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- //
- // Copyright (c) 2024 Dmitry Arkhipov (grisumbras@yandex.ru)
- //
- // 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)
- //
- // Official repository: https://github.com/boostorg/json
- //
- #ifndef BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP
- #define BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP
- namespace boost {
- namespace json {
- /** Return true if a memory resource's deallocate function has no effect.
- This metafunction may be specialized to indicate to the library that calls
- to the `deallocate` function of a @ref
- boost::container::pmr::memory_resource have no effect. The implementation
- will elide such calls when it is safe to do so. By default, the
- implementation assumes that all memory resources require a call to
- `deallocate` for each memory region obtained by calling `allocate`.
- @par Example
- This example specializes the metafuction for `my_resource`, to indicate
- that calls to deallocate have no effect:
- @code
- // Forward-declaration for a user-defined memory resource
- struct my_resource;
- // It is necessary to specialize the template from
- // inside the namespace in which it is declared:
- namespace boost {
- namespace json {
- template<>
- struct is_deallocate_trivial< my_resource >
- {
- static constexpr bool value = true;
- };
- } // namespace json
- } // namespace boost
- @endcode
- It is usually not necessary for users to check this trait. Instead, they
- can call @ref storage_ptr::is_deallocate_trivial to determine if the
- pointed-to memory resource has a trivial deallocate function.
- @see @ref storage_ptr, @ref boost::container::pmr::memory_resource.
- */
- template<class T>
- struct is_deallocate_trivial
- {
- /** A bool equal to true if calls to `T::do_deallocate` have no effect.
- The primary template sets `value` to false.
- */
- static constexpr bool value = false;
- };
- } // namespace json
- } // namespace boost
- #endif // BOOST_JSON_IS_DEALLOCATE_TRIVIAL_HPP
|