Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 956b3895add218f5721b1b7727feaa99429d151b)
+++ src/AST/Decl.hpp	(revision 58560d27705ae8b410c891acf6f69ae97480b871)
@@ -306,5 +306,5 @@
 enum class EnumAttribute{ Value, Posn, Label };
 
-/// enum declaration `enum Foo { ... };`
+/// enum declaration `enum Foo { ... };` or `enum(...) Foo { ... };`
 class EnumDecl final : public AggregateDecl {
 public:
@@ -317,4 +317,8 @@
 	std::vector< ast::ptr<ast::EnumInstType>> inlinedDecl; // child enums
 
+	bool is_c_enum     () const { return !isCfa; }
+	bool is_opaque_enum() const { return isCfa && nullptr == base; }
+	bool is_typed_enum () const { return isCfa && nullptr != base; }
+
 	EnumDecl( const CodeLocation& loc, const std::string& name, bool isCfa = false,
 		std::vector<ptr<Attribute>>&& attrs = {}, Linkage::Spec linkage = Linkage::Cforall,
@@ -331,6 +335,4 @@
 	const char * typeString() const override { return aggrString( Enum ); }
 
-	bool isTyped() const;
-	bool isOpaque() const;
 private:
 	EnumDecl * clone() const override { return new EnumDecl{ *this }; }
