Make endian_buffer::value_ public when BOOST_ENDIAN_NO_CTORS is defined; add test

This commit is contained in:
Peter Dimov
2020-10-06 18:53:56 +03:00
parent dffcf99ca6
commit 914d7d5c8d
3 changed files with 38 additions and 1 deletions

View File

@ -218,7 +218,9 @@ namespace endian
template< BOOST_SCOPED_ENUM(order) Order, class T, std::size_t n_bits >
class endian_buffer<Order, T, n_bits, align::no>
{
private:
#ifdef BOOST_ENDIAN_NO_CTORS
public:
#endif
BOOST_STATIC_ASSERT( (n_bits/8)*8 == n_bits );

View File

@ -108,3 +108,5 @@ run-ni endian_reverse_test4.cpp ;
run endian_reverse_test5.cpp ;
run-ni endian_reverse_test5.cpp ;
run packed_buffer_test.cpp ;

View File

@ -0,0 +1,33 @@
// Copyright 2020 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#if !defined(__GNUC__)
#include <boost/config/pragma_message.hpp>
BOOST_PRAGMA_MESSAGE( "Skipping test because __GNUC__ is not defined" )
int main() {}
#else
#define BOOST_ENDIAN_FORCE_PODNESS
#define BOOST_ENDIAN_NO_CTORS
#include <boost/endian/buffers.hpp>
#include <boost/core/lightweight_test.hpp>
using namespace boost::endian;
struct X
{
big_uint16_buf_t a;
double b;
little_uint16_buf_t c;
} __attribute__((packed));
int main()
{
BOOST_TEST_EQ( sizeof( X ), 12 );
return boost::report_errors();
}
#endif