diff --git a/src/base/bitunion.hh b/src/base/bitunion.hh index 6e7d223d20..38d10dac31 100644 --- a/src/base/bitunion.hh +++ b/src/base/bitunion.hh @@ -55,26 +55,31 @@ class BitfieldTypeImpl : public Base "Bitfield base class must be empty."); private: - using Base::setter; - template - struct TypeDeducer; - - template - friend class TypeDeducer; - - template - struct TypeDeducer + struct TypeDeducer { - typedef Type1 Storage; - typedef Type2 Type; + template + struct T; + + template + struct T + { + typedef Type1 Storage; + typedef Type2 Type; + }; + + struct Wrapper : public Base + { + using Base::setter; + }; + + typedef typename T::Storage Storage; + typedef typename T::Type Type; }; protected: - typedef typename TypeDeducer< - decltype(&BitfieldTypeImpl::setter)>::Storage Storage; - typedef typename TypeDeducer< - decltype(&BitfieldTypeImpl::setter)>::Type Type; + typedef typename TypeDeducer::Storage Storage; + typedef typename TypeDeducer::Type Type; Type getter(const Storage &storage) const = delete; void setter(Storage &storage, Type val) = delete;