• Jason Rhinelander's avatar
    Change all_of_t/any_of_t to all_of/any_of, add none_of · fa5d05e1
    Jason Rhinelander authored
    This replaces the current `all_of_t<Pred, Ts...>` with `all_of<Ts...>`,
    with previous use of `all_of_t<Pred, Ts...>` becoming
    `all_of<Pred<Ts>...>` (and similarly for `any_of_t`).  It also adds a
    `none_of<Ts...>`, a shortcut for `negation<any_of<Ts...>>`.
    
    This allows `all_of` and `any_of` to be used a bit more flexible, e.g.
    in cases where several predicates need to be tested for the same type
    instead of the same predicate for multiple types.
    
    This commit replaces the implementation with a more efficient version
    for non-MSVC.  For MSVC, this changes the workaround to use the
    built-in, recursive std::conjunction/std::disjunction instead.
    
    This also removes the `count_t` since `any_of_t` and `all_of_t` were the
    only things using it.
    
    This commit also rearranges some of the future std imports to use actual
    `std` implementations for C++14/17 features when under the appropriate
    compiler mode, as we were already doing for a few things (like
    index_sequence).  Most of these aren't saving much (the implementation
    for enable_if_t, for example, is trivial), but I think it makes the
    intention of the code instantly clear.  It also enables MSVC's native
    std::index_sequence support.
    fa5d05e1
pybind11.h 72.8 KB