• Roland Dreier's avatar
    Fix assertion failure for unions (#1685) (#1709) · 1aa8dd17
    Roland Dreier authored
    In def_readonly and def_readwrite, there is an assertion that the member comes
    from the class or a base class:
    
        static_assert(std::is_base_of<C, type>::value, "...");
    
    However, if C and type are the same type, is_base_of will still only be true
    if they are the same _non-union_ type.  This means we can't define accessors
    for the members of a union type because of this assertion.
    
    Update the assertion to test
    
        std::is_same<C, type>::value || std::is_base_of<C, type>::value
    
    which will allow union types, or members of base classes.
    
    Also add a basic unit test for accessing unions.
    1aa8dd17
test_union.cpp 603 Bytes