Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Expr.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -307,18 +307,4 @@
 }
 
-// 
-
-// --- EnumPosExpr
-EnumPosExpr::EnumPosExpr( const CodeLocation & loc, const EnumInstType * ty)
-: Expr( loc, new BasicType{ BasicType::UnsignedInt }), type( ty ) {
-	assert( ty );
-}
-
-EnumPosExpr::EnumPosExpr( const CodeLocation & loc, const Expr * expr )
-: Expr( loc, new BasicType{ BasicType::UnsignedInt }), expr(expr) {
-	assert( expr );
-}
-
-
 // --- LogicalExpr
 
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Expr.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -548,17 +548,4 @@
 };
 
-class EnumPosExpr final : public Expr {
-public:
-	ptr<EnumInstType> type;
-	ptr<Expr> expr;
-	
-	EnumPosExpr( const CodeLocation & loc, const EnumInstType * ty );
-	EnumPosExpr( const CodeLocation & loc, const Expr * expr );
-	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
-private:
-	EnumPosExpr * clone() const override { return new EnumPosExpr{ *this }; }
-	MUTATE_FRIEND
-};
-
 /// Variants of short-circuiting logical expression
 enum LogicalFlag { OrExpr, AndExpr };
Index: src/AST/Fwd.hpp
===================================================================
--- src/AST/Fwd.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Fwd.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -89,5 +89,4 @@
 class OffsetofExpr;
 class OffsetPackExpr;
-class EnumPosExpr;
 class LogicalExpr;
 class ConditionalExpr;
Index: src/AST/Node.cpp
===================================================================
--- src/AST/Node.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Node.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -232,6 +232,4 @@
 template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::OffsetPackExpr, ast::Node::ref_type::strong >;
-template class ast::ptr_base< ast::EnumPosExpr, ast::Node::ref_type::weak >;
-template class ast::ptr_base< ast::EnumPosExpr, ast::Node::ref_type::strong >;
 template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::weak >;
 template class ast::ptr_base< ast::LogicalExpr, ast::Node::ref_type::strong >;
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Pass.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -191,5 +191,4 @@
 	const ast::Expr *             visit( const ast::OffsetofExpr         * ) override final;
 	const ast::Expr *             visit( const ast::OffsetPackExpr       * ) override final;
-	const ast::Expr *             visit( const ast::EnumPosExpr          * ) override final;
 	const ast::Expr *             visit( const ast::LogicalExpr          * ) override final;
 	const ast::Expr *             visit( const ast::ConditionalExpr      * ) override final;
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Pass.impl.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -1452,19 +1452,4 @@
 
 //--------------------------------------------------------------------------
-// EnumPosExpr
-template< typename core_t>
-const ast::Expr * ast::Pass< core_t >::visit( const ast::EnumPosExpr * node ) {
-	VISIT_START( node );
-
-	if ( __visit_children() ) {
-		guard_symtab guard { *this };
-		maybe_accept( node, &EnumPosExpr::type );
-		maybe_accept( node, &EnumPosExpr::expr );
-	}
-
-	VISIT_END( Expr, node );
-}
-
-//--------------------------------------------------------------------------
 // LogicalExpr
 template< typename core_t >
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Print.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -1186,13 +1186,4 @@
 	}
 
-	virtual const ast::Expr * visit( const ast::EnumPosExpr * node ) override final {
-		os << "Enum Position Expression on: ";
-		++indent;
-		safe_print( node->type );
-		--indent;
-		postprint( node );
-		return node;
-	}
-
 	virtual const ast::Expr * visit( const ast::LogicalExpr * node ) override final {
 		os << "Short-circuited operation (" << (node->isAnd ? "and" : "or") << ") on: ";
Index: src/AST/Visitor.hpp
===================================================================
--- src/AST/Visitor.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/AST/Visitor.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -79,5 +79,4 @@
     virtual const ast::Expr *             visit( const ast::OffsetofExpr         * ) = 0;
     virtual const ast::Expr *             visit( const ast::OffsetPackExpr       * ) = 0;
-    virtual const ast::Expr *             visit( const ast::EnumPosExpr          * ) = 0;
     virtual const ast::Expr *             visit( const ast::LogicalExpr          * ) = 0;
     virtual const ast::Expr *             visit( const ast::ConditionalExpr      * ) = 0;
Index: src/CodeGen/CodeGenerator.cpp
===================================================================
--- src/CodeGen/CodeGenerator.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/CodeGen/CodeGenerator.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -778,9 +778,4 @@
 }
 
-void CodeGenerator::postvisit( ast::EnumPosExpr const * expr ) {
-	assertf( !options.genC, "EnumPosExpr should not reach code generation." );
-	output << "__CFA_enumeration_pos(" << genType( expr->type, "", options ) << ")";
-}
-
 void CodeGenerator::postvisit( ast::LogicalExpr const * expr ) {
 	extension( expr );
Index: src/CodeGen/CodeGenerator.hpp
===================================================================
--- src/CodeGen/CodeGenerator.hpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/CodeGen/CodeGenerator.hpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -77,5 +77,4 @@
 	void postvisit( ast::OffsetPackExpr const * );
 	void postvisit( ast::LogicalExpr const * );
-	void postvisit( ast::EnumPosExpr const * );
 	void postvisit( ast::ConditionalExpr const * );
 	void postvisit( ast::CommaExpr const * );
Index: src/Common/CodeLocationTools.cpp
===================================================================
--- src/Common/CodeLocationTools.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/Common/CodeLocationTools.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -158,5 +158,4 @@
     macro(OffsetPackExpr, Expr) \
     macro(LogicalExpr, Expr) \
-	macro(EnumPosExpr, Expr) \
     macro(ConditionalExpr, Expr) \
     macro(CommaExpr, Expr) \
Index: src/GenPoly/Box.cpp
===================================================================
--- src/GenPoly/Box.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/GenPoly/Box.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -1580,6 +1580,4 @@
 	ast::Expr const * postvisit( ast::OffsetPackExpr const * expr );
 
-	ast::Expr const * postvisit( ast::EnumPosExpr const * expr );
-
 	void beginScope();
 	void endScope();
@@ -1952,9 +1950,4 @@
 
 	return new ast::VariableExpr( expr->location, offsetArray );
-}
-
-// TODO 
-ast::Expr const * PolyGenericCalculator::postvisit( ast::EnumPosExpr const * expr ) {
-	return expr;
 }
 
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/InitTweak/InitTweak.cc	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -271,5 +271,4 @@
 		void previsit( const ast::OffsetofExpr * ) {}
 		void previsit( const ast::OffsetPackExpr * ) {}
-		void previsit( const ast::EnumPosExpr * ) {}
 		void previsit( const ast::CommaExpr * ) {}
 		void previsit( const ast::LogicalExpr * ) {}
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/Parser/ExpressionNode.cc	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -690,9 +690,4 @@
 } // build_unary_val
 
-ast::Expr * build_enum_pos_expr( const CodeLocation & location, ast::Expr * expr_node ) {
-	// return nullptr
-	return new ast::EnumPosExpr( location, std::move( expr_node ) );
-}
-
 ast::Expr * build_binary_val( const CodeLocation & location,
 		OperKinds op,
Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -659,5 +659,4 @@
 		void postvisit( const ast::OffsetofExpr * offsetofExpr );
 		void postvisit( const ast::OffsetPackExpr * offsetPackExpr );
-		void postvisit( const ast::EnumPosExpr * enumPosExpr );
 		void postvisit( const ast::LogicalExpr * logicalExpr );
 		void postvisit( const ast::ConditionalExpr * conditionalExpr );
@@ -1507,28 +1506,4 @@
 	void Finder::postvisit( const ast::OffsetPackExpr * offsetPackExpr ) {
 		addCandidate( offsetPackExpr, tenv );
-	}
-
-	void Finder::postvisit( const ast::EnumPosExpr * enumPosExpr ) {
-		CandidateFinder finder( context, tenv );
-		finder.find( enumPosExpr->expr );
-		CandidateList winners = findMinCost( finder.candidates );
-		if ( winners.size() != 1 ) SemanticError( enumPosExpr->expr.get(), "Ambiguous expression in position. ");
-		CandidateRef & choice = winners.front();
-		auto refExpr = referenceToRvalueConversion( choice->expr, choice->cost );
-		auto refResult = (refExpr->result).as<ast::EnumInstType>();
-		if ( !refResult ) {
-			SemanticError( refExpr, "Position for Non enum type is not supported" );
-		}
-		// determineEnumPosConstant( enumPosExpr, refResult );
-
-		const ast::NameExpr * const nameExpr = enumPosExpr->expr.strict_as<ast::NameExpr>();
-		const ast::EnumDecl * base = refResult->base;
-		if ( !base ) {
-			SemanticError( enumPosExpr, "Cannot be reference to a defined enumeration type" );
-		}
-		auto it = std::find_if( std::begin( base->members ), std::end( base->members ), 
-			[nameExpr]( ast::ptr<ast::Decl> decl ) { return decl->name == nameExpr->name; } );
-		unsigned position = it - base->members.begin();
-		addCandidate( ast::ConstantExpr::from_int( enumPosExpr->location, position ), tenv );
 	}
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/ResolvExpr/ConversionCost.cc	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -361,9 +361,5 @@
 }
 
-void ConversionCost::postvisit( const ast::EnumInstType * enumInstType ) {
-	//	const ast::EnumDecl * baseEnum = enumInstType->base;
-	// if ( const ast::Type * baseType = baseEnum->base ) {
-	// 	costCalc( baseType, dst, srcIsLvalue, symtab, env );
-	// } else {
+void ConversionCost::postvisit( const ast::EnumInstType * ) {
 	static ast::ptr<ast::BasicType> integer = { new ast::BasicType( ast::BasicType::SignedInt ) };
 	cost = costCalc( integer, dst, srcIsLvalue, symtab, env );
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 496ffc17cf8822f6bee4aed86e97230a1b3a0776)
+++ src/ResolvExpr/Resolver.cc	(revision 9ddcee10f8009f7d349eb15c2cfa983e3265d88e)
@@ -411,6 +411,4 @@
 		const ast::ConstructorInit * previsit( const ast::ConstructorInit * );
 
-		const ast::EnumPosExpr *	 previsit( const ast::EnumPosExpr * );
-
 		void resolveWithExprs(std::vector<ast::ptr<ast::Expr>> & exprs, std::list<ast::ptr<ast::Stmt>> & stmtsToAdd);
 
@@ -1232,9 +1230,4 @@
 	}
 
-	const ast::EnumPosExpr * Resolver::previsit( const ast::EnumPosExpr * enumPos ) {
-		visitor->maybe_accept( enumPos, &ast::EnumPosExpr::expr );
-		return enumPos;
-	}
-
 	// suppress error on autogen functions and mark invalid autogen as deleted.
 	bool Resolver::on_error(ast::ptr<ast::Decl> & decl) {
