Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Fwd.hpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -133,4 +133,5 @@
 class OneType;
 class GlobalScopeType;
+class EnumPosType;
 
 class Designation;
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Pass.hpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -222,4 +222,5 @@
 	const ast::Type *             visit( const ast::UnionInstType        * ) override final;
 	const ast::Type *             visit( const ast::EnumInstType         * ) override final;
+	const ast::Type *             visit( const ast::EnumPosType          * ) override final;
 	const ast::Type *             visit( const ast::TraitInstType        * ) override final;
 	const ast::Type *             visit( const ast::TypeInstType         * ) override final;
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Pass.impl.hpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -1986,4 +1986,13 @@
 
 //--------------------------------------------------------------------------
+// EnumPosType
+template< typename core_t >
+const ast::Type * ast::Pass< core_t >::visit( const ast::EnumPosType * node ) {
+	VISIT_START( node );
+
+	VISIT_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
 // TraitInstType
 template< typename core_t >
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Print.cpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -1576,4 +1576,11 @@
 	}
 
+	virtual const ast::Type * visit( const ast::EnumPosType * node ) override final {
+		preprint( node );
+		os << "enum pos with ";
+		(*(node->instance)).accept( *this );
+		return node;
+	}
+
 	virtual const ast::Type * visit( const ast::TraitInstType * node ) override final {
 		preprint( node );
Index: src/AST/Type.hpp
===================================================================
--- src/AST/Type.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Type.hpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -362,4 +362,15 @@
 using EnumInstType = SueInstType<EnumDecl>;
 
+class EnumPosType final : public Type {
+public:
+	readonly<EnumInstType> instance;
+	const Type * accept( Visitor & v ) const override { return v.visit( this ); }
+	EnumPosType( const EnumInstType * instance ): instance(instance) {}
+	
+private:
+	EnumPosType * clone() const override { return new EnumPosType{ *this }; }
+	MUTATE_FRIEND
+};
+
 /// An instance of a trait type.
 class TraitInstType final : public BaseInstType {
Index: src/AST/Visitor.hpp
===================================================================
--- src/AST/Visitor.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
+++ src/AST/Visitor.hpp	(revision 0522ebe7b3ae7204a1d2c50a1bc7273bfa36762a)
@@ -119,4 +119,5 @@
     virtual const ast::Type *             visit( const ast::OneType              * ) = 0;
     virtual const ast::Type *             visit( const ast::GlobalScopeType      * ) = 0;
+    virtual const ast::Type *             visit( const ast::EnumPosType          * ) = 0;
     virtual const ast::Designation *      visit( const ast::Designation          * ) = 0;
     virtual const ast::Init *             visit( const ast::SingleInit           * ) = 0;
