• Philip Pronin's avatar
    update FOLLY_IS_TRIVIALLY_COPYABLE · e22f0a67
    Philip Pronin authored
    Summary:
    Let's make sure that boost version is intented to mean exactly
    the same as `std::is_trivially_copyable` (see 9 [class] / 6) to avoid any
    confusion (current boost path is more close to
    `std::is_trivially_copy_constructible` than to
    `std::is_trivially_copyable`;  UPD: unfortunately, old versions of boost
    don't support `boost::has_trivial_move_constructor` and friends, so I
    can't completely mimic `std::is_trivially_copyable` here).
    
    As mentioned in the original comment, `__has_trivial_copy` returns 1 in
    case of deleted copy ctor in clang (contradicts 12.8 [class.copy] / 13 +
    8.4.2 [dcl.fct.def.default] / 4), which makes `FOLLY_IS_TRIVIALLY_COPYABLE`
    accept `std::unique_ptr<>`; using `boost::has_trivial_destructor` would
    at least save us from the problems in this case.
    
    Alternative "solution" may be to rename `FOLLY_IS_TRIVIALLY_COPYABLE` to
    `FOLLY_IS_TRIVIALLY_COPY_CONSTRUCTIBLE`, and make sure
    `folly::small_vector` won't call dtor when memcopies the data around.
    
    Test Plan: fbconfig --clang folly/test:small_vector_test && fbmake runtests_opt (fails in trunk, passes with this diff)
    
    Reviewed By: pgriess@fb.com
    
    FB internal diff: D1216158
    e22f0a67
Portability.h 3.92 KB