From d60d4895f10c23267c75a8325d726d68a8581fe7 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 25 Apr 2018 10:10:09 +0200
Subject: [PATCH] fix unresolved overload function in g++-7

---
 alib2algo/src/automaton/properties/ReachableStates.h   | 10 ++++++----
 alib2algo/src/automaton/properties/UsefullStates.h     | 10 ++++++----
 .../src/automaton/simplify/UnreachableStatesRemover.h  |  8 +++++---
 .../src/automaton/simplify/UselessStatesRemover.h      |  6 ++++--
 4 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/alib2algo/src/automaton/properties/ReachableStates.h b/alib2algo/src/automaton/properties/ReachableStates.h
index 129ee70da6..74161caa41 100644
--- a/alib2algo/src/automaton/properties/ReachableStates.h
+++ b/alib2algo/src/automaton/properties/ReachableStates.h
@@ -30,16 +30,18 @@ public:
 	/**
 	 * Removes dead states from FSM. Melichar 2.29
 	 */
-	template < class T, class SymbolType = typename automaton::SymbolTypeOfAutomaton < T >, class StateType = typename automaton::StateTypeOfAutomaton < T > >
-	static ext::set<StateType> reachableStates( const T & fsm );
+	template < class T >
+	static ext::set < typename automaton::StateTypeOfAutomaton < T > > reachableStates( const T & fsm );
 	template < class SymbolType, class StateType >
 	static ext::set<StateType> reachableStates( const automaton::MultiInitialStateNFA < SymbolType, StateType > & fsm );
 	template < class SymbolType, class StateType >
 	static ext::set<StateType> reachableStates( const automaton::DFA < SymbolType, StateType > & fsm );
 };
 
-template < class T, class SymbolType, class StateType >
-ext::set<StateType> ReachableStates::reachableStates( const T & fsm ) {
+template < class T >
+ext::set < typename automaton::StateTypeOfAutomaton < T > > ReachableStates::reachableStates( const T & fsm ) {
+	using StateType = typename automaton::StateTypeOfAutomaton < T >;
+
 	// 1a
 	ext::deque<ext::set<StateType>> Qi;
 	Qi.push_back( ext::set<StateType>( ) );
diff --git a/alib2algo/src/automaton/properties/UsefullStates.h b/alib2algo/src/automaton/properties/UsefullStates.h
index 6a3b40bade..49869b121a 100644
--- a/alib2algo/src/automaton/properties/UsefullStates.h
+++ b/alib2algo/src/automaton/properties/UsefullStates.h
@@ -30,14 +30,16 @@ public:
 	/**
 	 * Removes dead states from FSM. Melichar 2.32
 	 */
-	template < class T, class SymbolType = typename automaton::SymbolTypeOfAutomaton < T >, class StateType = typename automaton::StateTypeOfAutomaton < T > >
-	static ext::set<StateType> usefullStates( const T & fsm );
+	template < class T >
+	static ext::set < typename automaton::StateTypeOfAutomaton < T > > usefullStates( const T & fsm );
 	template < class SymbolType, class StateType >
 	static ext::set<StateType> usefullStates( const automaton::DFA < SymbolType, StateType > & fsm );
 };
 
-template < class T, class SymbolType, class StateType >
-ext::set<StateType> UsefullStates::usefullStates( const T & fsm ) {
+template < class T >
+ext::set < typename automaton::StateTypeOfAutomaton < T > > UsefullStates::usefullStates( const T & fsm ) {
+	using StateType = typename automaton::StateTypeOfAutomaton < T >;
+
 	// 1a
 	ext::deque<ext::set<StateType>> Qi;
 	Qi.push_back( ext::set<StateType>( ) );
diff --git a/alib2algo/src/automaton/simplify/UnreachableStatesRemover.h b/alib2algo/src/automaton/simplify/UnreachableStatesRemover.h
index 51cf3fd84b..5a9bfc0e4e 100644
--- a/alib2algo/src/automaton/simplify/UnreachableStatesRemover.h
+++ b/alib2algo/src/automaton/simplify/UnreachableStatesRemover.h
@@ -27,7 +27,7 @@ public:
 	/**
 	 * Removes dead states from FSM. Melichar 2.29
 	 */
-	template<class T, class SymbolType = typename automaton::SymbolTypeOfAutomaton < T >, class StateType = typename automaton::StateTypeOfAutomaton < T > >
+	template < class T >
 	static T remove( const T & automaton );
 	template < class SymbolType, class StateType >
 	static automaton::DFA < SymbolType, StateType > remove( const automaton::DFA < SymbolType, StateType > & fsm );
@@ -37,8 +37,10 @@ public:
 	static automaton::DFTA < SymbolType, RankType, StateType > remove( const automaton::DFTA < SymbolType, RankType, StateType > & dfta );
 };
 
-template<class T, class SymbolType, class StateType >
-T UnreachableStatesRemover::remove( const T & fsm ) {
+template < class T >
+T UnreachableStatesRemover::remove ( const T & fsm ) {
+	using StateType = typename automaton::StateTypeOfAutomaton < T >;
+
 	// 1a
 	ext::set<StateType> Qa = automaton::properties::ReachableStates::reachableStates( fsm );
 
diff --git a/alib2algo/src/automaton/simplify/UselessStatesRemover.h b/alib2algo/src/automaton/simplify/UselessStatesRemover.h
index 3d3489161e..175ed5b0f8 100644
--- a/alib2algo/src/automaton/simplify/UselessStatesRemover.h
+++ b/alib2algo/src/automaton/simplify/UselessStatesRemover.h
@@ -27,7 +27,7 @@ public:
 	/**
 	 * Removes dead states from FSM. Melichar 2.29
 	 */
-	template<class T, class SymbolType = typename automaton::SymbolTypeOfAutomaton < T >, class StateType = typename automaton::StateTypeOfAutomaton < T > >
+	template < class T >
 	static T remove( const T & automaton );
 	template < class SymbolType, class StateType >
 	static automaton::DFA < SymbolType, StateType > remove( const automaton::DFA < SymbolType, StateType > & fsm );
@@ -37,8 +37,10 @@ public:
 	static automaton::DFTA < SymbolType, RankType, StateType > remove( const automaton::DFTA < SymbolType, RankType, StateType > & dfta );
 };
 
-template < class T, class SymbolType, class StateType >
+template < class T >
 T UselessStatesRemover::remove( const T & fsm ) {
+	using StateType = typename automaton::StateTypeOfAutomaton < T >;
+
 	// 1.
 	ext::set<StateType> Qu = automaton::properties::UsefullStates::usefullStates( fsm );
 
-- 
GitLab