Index: src/AST/FunctionSpec.hpp
===================================================================
--- src/AST/FunctionSpec.hpp	(revision b96d7c198e371dbd361b72116c33fa18df27ef5a)
+++ src/AST/FunctionSpec.hpp	(revision 7f3f63cc9c42e8363dc7b2b0cf4b7e8d803c04e2)
@@ -31,16 +31,20 @@
 
 	/// Bitflag type for storage classes
-	union Specs {
-		unsigned int val;
-		struct {
-			bool is_inline   : 1;
-			bool is_noreturn : 1;
-			bool is_fortran  : 1;
+	struct spec_flags {
+		union {
+			unsigned int val;
+			struct {
+				bool is_inline   : 1;
+				bool is_noreturn : 1;
+				bool is_fortran  : 1;
+			};
+
+			// MakeBitfieldPrint( NumSpecs )
 		};
 
-		MakeBitfield( Specs )
-		MakeBitfieldPrint( NumSpecs )
+		constexpr spec_flags( unsigned int val ) : val(val) {}
 	};
 
+	using Specs = bitfield<spec_flags>;
 }
 }
Index: src/AST/LinkageSpec.hpp
===================================================================
--- src/AST/LinkageSpec.hpp	(revision b96d7c198e371dbd361b72116c33fa18df27ef5a)
+++ src/AST/LinkageSpec.hpp	(revision 7f3f63cc9c42e8363dc7b2b0cf4b7e8d803c04e2)
@@ -35,16 +35,20 @@
 
 	/// Bitflag type for storage classes
-	union Spec {
-		unsigned int val;
-		struct {
-			bool is_mangled      : 1;
-			bool is_generatable  : 1;
-			bool is_overrideable : 1;
-			bool is_builtin      : 1;
-			bool is_gcc_builtin  : 1;
+	struct spec_flags {
+		union {
+			unsigned int val;
+			struct {
+				bool is_mangled      : 1;
+				bool is_generatable  : 1;
+				bool is_overrideable : 1;
+				bool is_builtin      : 1;
+				bool is_gcc_builtin  : 1;
+			};
 		};
 
-		MakeBitfield( Spec )
+		constexpr spec_flags( unsigned int val ) : val(val) {}
 	};
+
+	using Spec = bitfield<spec_flags>;
 
 	/// If `cmd` = "C" returns `spec` with `is_mangled = false`.
Index: src/AST/StorageClasses.hpp
===================================================================
--- src/AST/StorageClasses.hpp	(revision b96d7c198e371dbd361b72116c33fa18df27ef5a)
+++ src/AST/StorageClasses.hpp	(revision 7f3f63cc9c42e8363dc7b2b0cf4b7e8d803c04e2)
@@ -33,18 +33,22 @@
 
 	/// Bitflag type for storage classes
-	union Classes {
-		unsigned int val;
-		struct {
-			bool is_extern      : 1;
-			bool is_static      : 1;
-			bool is_auto        : 1;
-			bool is_register    : 1;
-			bool is_threadlocal : 1;
+	struct class_flags {
+		union {
+			unsigned int val;
+			struct {
+				bool is_extern      : 1;
+				bool is_static      : 1;
+				bool is_auto        : 1;
+				bool is_register    : 1;
+				bool is_threadlocal : 1;
+			};
+
+			// MakeBitfieldPrint( NumClasses )
 		};
 
-		MakeBitfield( Classes )
-		MakeBitfieldPrint( NumClasses )
+		constexpr class_flags( unsigned int val ) : val(val) {}
 	};
 
+	using Classes = bitfield<class_flags>;
 }
 }
