From c24d1272290313243738b646688eac2d68971be3 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Tue, 24 Mar 2020 12:03:07 -0700 Subject: [PATCH] Avoid non-namespace template specialization --- common/albyte.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/common/albyte.h b/common/albyte.h index fe8cdb4f..a2f6ec28 100644 --- a/common/albyte.h +++ b/common/albyte.h @@ -57,18 +57,22 @@ inline constexpr al::byte operator~(al::byte b) noexcept { return al::byte(~to_integer(b)); } +namespace detail_ { + template struct Elem { }; + template<> struct Elem<1> { using type = uint8_t; }; + template<> struct Elem<2> { using type = uint16_t; }; + template<> struct Elem<3> { using type = uint32_t; }; + template<> struct Elem<4> { using type = uint32_t; }; + + template using ElemT = typename Elem::type; +} // namespace detail_ + template class bitfield { - template struct ElemT { }; - template<> struct ElemT<1> { using type = uint8_t; }; - template<> struct ElemT<2> { using type = uint16_t; }; - template<> struct ElemT<3> { using type = uint32_t; }; - template<> struct ElemT<4> { using type = uint32_t; }; - static constexpr size_t bits_per_byte{std::numeric_limits::digits}; static constexpr size_t NumElems{(N+bits_per_byte-1) / bits_per_byte}; - typename ElemT::type vals{}; + typename detail_::ElemT vals{}; public: template