• Ed Catmur's avatar
    Add anyset & frozenset, enable copying (cast) to std::set (#3901) · 68a0b2df
    Ed Catmur authored
    * Add frozenset, and allow it cast to std::set
    
    For the reverse direction, std::set still casts to set. This is in concordance with the behavior for sequence containers, where e.g. tuple casts to std::vector but std::vector casts to list.
    
    Extracted from #3886.
    
    * Rename set_base to any_set to match Python C API
    
    since this will be part of pybind11 public API
    
    * PR: static_cast, anyset
    
    * Add tests for frozenset
    
    and rename anyset methods
    
    * Remove frozenset default ctor, add tests
    
    Making frozenset non-default constructible means that we need to adjust pyobject_caster to not require that its value is default constructible, by initializing value to a nil handle.  This also allows writing C++ functions taking anyset, and is arguably a performance improvement, since there is no need to allocate an object that will just be replaced by load.
    
    Add some more tests, including anyset::empty, anyset::size, set::add and set::clear.
    
    * [pre-commit.ci] auto fixes from pre-commit.com hooks
    
    for more information, see https://pre-commit.ci
    
    
    
    * Add rationale to `pyobject_caster` default ctor
    
    * Remove ineffectual protected: access control
    Co-authored-by: default avatarpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    68a0b2df
test_stl.py 11.9 KB