Support for integer types with non-trivial destructors, copy, and move constructors #3575
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently it is not possible to set
number_integer_t
ornumber_unsigned_t
to types with nontrivial destructors, move constructors, copy constructors, or assignment operators.This means it's not possible to use types that wrap the
mpz
API from the gnu multiple precision arithmetic library.To use custom types at all, we move from using
std::is_signed<T>
,std::is_integral<T>
etc (which do not support custom types) to usingstd::numeric_limits<T>::is_integral
etc (which do). This is #3577.This would be a lot easier if
json_value
were implemented usingstd::variant
, which does all the tagged-union book-keeping for us. The basics of tagged union book-keeping are:destroy
, it can be assigned to withnew (uninit_value) json_value(new_type, new_value)
.destroy
function needs to manually call destructors on the parts not being handled with an allocatorThis adds a test containing a jankily-written
heap_int
type to verify that this new feature works.[Describe your pull request here. Please read the text below the line, and make sure you follow the checklist.]
Pull request checklist
Read the Contribution Guidelines for detailed information.
include/nlohmann
directory, runmake amalgamate
to create the single-header filesingle_include/nlohmann/json.hpp
. The whole process is described here.Please don't
#ifdef
s or other means.