mirror of
https://github.com/boostorg/container.git
synced 2025-08-02 05:54:28 +02:00
Merge pull request #239 from dangelog/issue238
Do not memset(0) POD types
This commit is contained in:
@@ -1276,10 +1276,6 @@ member object and member function pointers) to be initializable using `std::mems
|
|||||||
Most platforms are compatible with this initialization, but in case this initialization is not desired the
|
Most platforms are compatible with this initialization, but in case this initialization is not desired the
|
||||||
user can `#define BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_ZERO` before including library headers.
|
user can `#define BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_ZERO` before including library headers.
|
||||||
|
|
||||||
If neither `BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_NOT_ZERO` nor
|
|
||||||
`BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_ZERO` is defined [*Boost.Container] also considers POD
|
|
||||||
types to be value initializable via `std::memset` with value zero.
|
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@@ -296,9 +296,6 @@ struct is_memzero_initializable
|
|||||||
#if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO)
|
#if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO)
|
||||||
|| dtl::is_floating_point<value_type>::value
|
|| dtl::is_floating_point<value_type>::value
|
||||||
#endif
|
#endif
|
||||||
#if defined(BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO) && defined(BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL)
|
|
||||||
|| dtl::is_pod<value_type>::value
|
|
||||||
#endif
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -220,6 +220,12 @@ bool test_span_conversion()
|
|||||||
|
|
||||||
#endif //BOOST_VECTOR_TEST_HAS_SPAN
|
#endif //BOOST_VECTOR_TEST_HAS_SPAN
|
||||||
|
|
||||||
|
struct POD { int POD::*ptr; };
|
||||||
|
BOOST_STATIC_ASSERT_MSG
|
||||||
|
( boost::container::dtl::is_pod<POD>::value
|
||||||
|
, "POD test failed"
|
||||||
|
);
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@@ -392,5 +398,24 @@ int main()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////
|
||||||
|
// POD types should not be 0-filled testing
|
||||||
|
////////////////////////////////////
|
||||||
|
#if !defined(_MSC_VER)
|
||||||
|
// MSVC miscompiles value initialization of pointers to data members,
|
||||||
|
// https://developercommunity.visualstudio.com/t/Pointer-to-data-member-is-not-initialize/10238905
|
||||||
|
{
|
||||||
|
typedef boost::container::vector<POD> cont;
|
||||||
|
const std::size_t size = 10;
|
||||||
|
cont a(size);
|
||||||
|
for(std::size_t i = 0; i != size; ++i) {
|
||||||
|
if (a[i].ptr != 0) {
|
||||||
|
std::cerr << "POD test failed" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user