Skip to content

Commit 3781e19

Browse files
committed
Add more noexcept in cases similar to byteswap()
1 parent fc52674 commit 3781e19

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

include/nonstd/bit.hpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -804,78 +804,78 @@ typedef std11::integral_constant<int, static_cast<int>(endian::native)> native_e
804804

805805
// to big endian (implementation):
806806

807-
inline std11::uint8_t to_big_endian_( std11::uint8_t v, little_endian_type )
807+
inline std11::uint8_t to_big_endian_( std11::uint8_t v, little_endian_type ) bit_noexcept
808808
{
809809
return v;
810810
}
811811

812-
inline std11::uint16_t to_big_endian_( std11::uint16_t v, little_endian_type )
812+
inline std11::uint16_t to_big_endian_( std11::uint16_t v, little_endian_type ) bit_noexcept
813813
{
814814
return bit_byteswap16( v );
815815
}
816816

817-
inline std11::uint32_t to_big_endian_( std11::uint32_t v, little_endian_type )
817+
inline std11::uint32_t to_big_endian_( std11::uint32_t v, little_endian_type ) bit_noexcept
818818
{
819819
return bit_byteswap32( v );
820820
}
821821

822822
#if bit_CPP11_OR_GREATER
823823

824-
inline std11::uint64_t to_big_endian_( std11::uint64_t v, little_endian_type )
824+
inline std11::uint64_t to_big_endian_( std11::uint64_t v, little_endian_type ) bit_noexcept
825825
{
826826
return bit_byteswap64( v );
827827
}
828828

829829
#endif
830830

831831
template< typename T >
832-
inline T to_big_endian_( T v, big_endian_type )
832+
inline T to_big_endian_( T v, big_endian_type ) bit_noexcept
833833
{
834834
return v;
835835
}
836836

837837
// to little endian (implementation):
838838

839-
inline std11::uint8_t to_little_endian_( std11::uint8_t v, big_endian_type )
839+
inline std11::uint8_t to_little_endian_( std11::uint8_t v, big_endian_type ) bit_noexcept
840840
{
841841
return v;
842842
}
843843

844-
inline std11::uint16_t to_little_endian_( std11::uint16_t v, big_endian_type )
844+
inline std11::uint16_t to_little_endian_( std11::uint16_t v, big_endian_type ) bit_noexcept
845845
{
846846
return bit_byteswap16( v );
847847
}
848848

849-
inline std11::uint32_t to_little_endian_( std11::uint32_t v, big_endian_type )
849+
inline std11::uint32_t to_little_endian_( std11::uint32_t v, big_endian_type ) bit_noexcept
850850
{
851851
return bit_byteswap32( v );
852852
}
853853

854854
#if bit_CPP11_OR_GREATER
855855

856-
inline std11::uint64_t to_little_endian_( std11::uint64_t v, big_endian_type )
856+
inline std11::uint64_t to_little_endian_( std11::uint64_t v, big_endian_type ) bit_noexcept
857857
{
858858
return bit_byteswap64( v );
859859
}
860860

861861
#endif
862862

863863
template< typename T >
864-
inline T to_little_endian_( T v, little_endian_type )
864+
inline T to_little_endian_( T v, little_endian_type ) bit_noexcept
865865
{
866866
return v;
867867
}
868868

869869
// to native endian (implementation):
870870

871871
template< typename T >
872-
inline T to_native_endian_( T v, native_endian_type )
872+
inline T to_native_endian_( T v, native_endian_type ) bit_noexcept
873873
{
874874
return v;
875875
}
876876

877877
template< typename T, typename EN >
878-
inline T to_native_endian_( T v, EN )
878+
inline T to_native_endian_( T v, EN ) bit_noexcept
879879
{
880880
// force conversion:
881881
return to_big_endian_( v, little_endian_type() );
@@ -887,37 +887,37 @@ inline T to_native_endian_( T v, EN )
887887
//
888888

889889
template< typename T >
890-
inline T to_big_endian( T v )
890+
inline T to_big_endian( T v ) bit_noexcept
891891
{
892892
return to_big_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), little_endian_type() );
893893
}
894894

895895
template< typename T, typename EN >
896-
inline T to_big_endian( T v, EN )
896+
inline T to_big_endian( T v, EN ) bit_noexcept
897897
{
898898
return to_big_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), EN() );
899899
}
900900

901901
template< typename T >
902-
inline T to_little_endian( T v )
902+
inline T to_little_endian( T v ) bit_noexcept
903903
{
904904
return to_little_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), big_endian_type() );
905905
}
906906

907907
template< typename T, typename EN >
908-
inline T to_little_endian( T v, EN )
908+
inline T to_little_endian( T v, EN ) bit_noexcept
909909
{
910910
return to_little_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), EN() );
911911
}
912912

913913
template< typename T >
914-
inline T to_native_endian( T v )
914+
inline T to_native_endian( T v ) bit_noexcept
915915
{
916916
return to_native_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), native_endian_type() );
917917
}
918918

919919
template< typename T, typename EN >
920-
inline T to_native_endian( T v, EN )
920+
inline T to_native_endian( T v, EN ) bit_noexcept
921921
{
922922
return to_native_endian_( static_cast< typename normalized_uint_type<T>::type >( v ), EN() );
923923
}
@@ -927,19 +927,19 @@ inline T to_native_endian( T v, EN )
927927
//
928928

929929
template< typename T >
930-
inline T as_big_endian( T v )
930+
inline T as_big_endian( T v ) bit_noexcept
931931
{
932932
return to_big_endian( v, native_endian_type() );
933933
}
934934

935935
template< typename T >
936-
inline T as_little_endian( T v )
936+
inline T as_little_endian( T v ) bit_noexcept
937937
{
938938
return to_little_endian( v, native_endian_type() );
939939
}
940940

941941
template< typename T >
942-
inline T as_native_endian( T v )
942+
inline T as_native_endian( T v ) bit_noexcept
943943
{
944944
return to_native_endian( v, native_endian_type() );
945945
}

test/bit.t.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
#endif
3434

3535
#if bit_USES_STD_BIT
36+
37+
#define bit_noexcept noexcept
38+
3639
namespace std {
3740
#else
3841
namespace nonstd { namespace bit {
@@ -64,7 +67,7 @@ inline std::ostream & operator<<( std::ostream & os, endian const & e )
6467
#endif
6568

6669
template< typename T >
67-
inline T bitmask( int i )
70+
inline T bitmask( int i ) bit_noexcept
6871
{
6972
return static_cast<T>( T(1) << i );
7073
}
@@ -152,7 +155,7 @@ CASE( "has_single_bit(): single bit yields false for multiple bits set" " [bit.p
152155
// avoid ambiguous overload resolution for VS2010 (VC10):
153156

154157
template< typename T >
155-
std::bitset<8> bin( T v )
158+
std::bitset<8> bin( T v ) bit_noexcept
156159
{
157160
#if defined( _MSC_VER ) && _MSC_VER <= 1600
158161
return std::bitset<8>( static_cast<int>(v) );

0 commit comments

Comments
 (0)