Skip to content

Commit 53cc5ee

Browse files
committed
Add more constraints to in<T> typedef
1 parent cc7178f commit 53cc5ee

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

include/bitstream/traits/bool_trait.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace bitstream
1515
{
1616
template<typename Stream>
1717
typename utility::is_writing_t<Stream>
18-
static serialize(Stream& writer, bool value) noexcept
18+
static serialize(Stream& writer, in<bool> value) noexcept
1919
{
2020
uint32_t unsigned_value = value;
2121

include/bitstream/traits/integral_traits.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "../utility/assert.h"
33
#include "../utility/bits.h"
44
#include "../utility/meta.h"
5+
#include "../utility/parameter.h"
56

67
#include "../stream/serialize_traits.h"
78

@@ -38,7 +39,7 @@ namespace bitstream
3839
*/
3940
template<typename Stream>
4041
typename utility::is_writing_t<Stream>
41-
static serialize(Stream& writer, T value, T min = (std::numeric_limits<T>::min)(), T max = (std::numeric_limits<T>::max)()) noexcept
42+
static serialize(Stream& writer, in<T> value, T min = (std::numeric_limits<T>::min)(), T max = (std::numeric_limits<T>::max)()) noexcept
4243
{
4344
BS_ASSERT(min < max);
4445

@@ -143,7 +144,7 @@ namespace bitstream
143144
*/
144145
template<typename Stream>
145146
typename utility::is_writing_t<Stream>
146-
static serialize(Stream& writer, T value) noexcept
147+
static serialize(Stream& writer, in<T> value) noexcept
147148
{
148149
static_assert(Min < Max);
149150

include/bitstream/utility/parameter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ namespace bitstream
9191
* @brief Passes by const or const reference depending on size
9292
*/
9393
template<typename T>
94-
using in = std::conditional_t<(sizeof(T) <= 16), std::add_const_t<T>, std::add_lvalue_reference_t<std::add_const_t<T>>>;
94+
using in = std::conditional_t<(sizeof(T) <= 16 && std::is_trivially_copy_constructible_v<T>), std::add_const_t<T>, std::add_lvalue_reference_t<std::add_const_t<T>>>;
9595

9696
/**
9797
* @brief Passes by reference

0 commit comments

Comments
 (0)