• Clemens Hammacher's avatar
    Fix is_trivially_copyable check for MSVC and older stdlibc++ · 9dd6f0d0
    Clemens Hammacher authored
    MSVC 2015 and 2017 implement std::is_trivially_copyable, but not
    correctly. Hence, reimplement it using more low-level primitives.
    
    For stdlibc++ versions below 5.0, we already have a workaround for the
    missing support of std::is_trivially_copyable, but this is an unsound
    approximation, because it is ignoring move constructor, move assignment
    and copy assignment. Therefore, do not use this approximation for
    asserting trivial copyability of a type.
    
    Finally, add unittests for the new is_trivially_copyable
    implementations.
    
    R=mstarzinger@chromium.org
    CC=loorongjie@gmail.com
    
    Change-Id: I9ee56a65882e8c94b72c9a2d484edd27963a5d89
    Reviewed-on: https://chromium-review.googlesource.com/941521Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#51651}
    9dd6f0d0
macros.h 14.8 KB