From cf06044aea5786a3ba2295e8d6c1071f613f0245 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 1 Dec 2016 20:47:12 +0100
Subject: [PATCH] template tree conversion constructors

---
 alib2data/src/string/CyclicString.h           |  4 +--
 alib2data/src/string/LinearString.h           |  4 +--
 .../ranked/PrefixRankedBarNonlinearPattern.h  | 32 +++++++++----------
 .../src/tree/ranked/PrefixRankedBarPattern.h  | 12 +++----
 .../src/tree/ranked/PrefixRankedBarTree.h     |  4 +--
 .../ranked/PrefixRankedNonlinearPattern.h     | 20 ++++++------
 .../src/tree/ranked/PrefixRankedPattern.h     |  8 ++---
 alib2data/src/tree/ranked/PrefixRankedTree.h  |  4 +--
 .../src/tree/ranked/RankedNonlinearPattern.h  |  4 +--
 alib2data/src/tree/ranked/RankedPattern.h     |  4 +--
 .../tree/unranked/UnrankedNonlinearPattern.h  |  6 ++--
 alib2data/src/tree/unranked/UnrankedPattern.h |  6 ++--
 alib2data/src/tree/unranked/UnrankedTree.h    |  6 ++--
 13 files changed, 60 insertions(+), 54 deletions(-)

diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index 24453302ee..513da9e8e0 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -42,7 +42,7 @@ public:
 	explicit CyclicString ( std::vector < SymbolType > str );
 	explicit CyclicString ( const std::string & str );
 	explicit CyclicString ( const char * str );
-	explicit CyclicString ( const Epsilon < > & epsilon );
+	explicit CyclicString ( const Epsilon < SymbolType > & epsilon );
 
 	virtual StringBase * clone ( ) const;
 	virtual StringBase * plunder ( ) &&;
@@ -120,7 +120,7 @@ CyclicString < SymbolType >::CyclicString(const char* str) : CyclicString((std::
 }
 
 template < class SymbolType >
-CyclicString < SymbolType >::CyclicString(const Epsilon < > & epsilon) : CyclicString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
+CyclicString < SymbolType >::CyclicString(const Epsilon < SymbolType > & epsilon) : CyclicString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index c76babddb4..e8e7557443 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -51,7 +51,7 @@ public:
 	explicit LinearString ( std::vector < SymbolType > str );
 	explicit LinearString ( const std::string & str );
 	explicit LinearString ( const char * str );
-	explicit LinearString ( const Epsilon < > & epsilon );
+	explicit LinearString ( const Epsilon < SymbolType > & epsilon );
 
 	virtual StringBase * clone ( ) const;
 	virtual StringBase * plunder ( ) &&;
@@ -142,7 +142,7 @@ LinearString < SymbolType >::LinearString(const char* str) : LinearString ( ( st
 }
 
 template < class SymbolType >
-LinearString < SymbolType >::LinearString(const Epsilon < > & epsilon) : LinearString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
+LinearString < SymbolType >::LinearString(const Epsilon < SymbolType > & epsilon) : LinearString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 516475868b..7ab57a38e1 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -53,14 +53,14 @@ public:
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -148,35 +148,35 @@ PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonline
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, toPrefixRankedBar ( tree.getContent ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, toPrefixRankedBar ( tree.getContent ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), { }, barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), { }, barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) } + tree.getNonlinearVariables ( ), toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) } + tree.getNonlinearVariables ( ), toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ), tree.getVariablesBar ( ), tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ), tree.getVariablesBar ( ), tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedTree < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index e27476deed..3e5d3e25bf 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -51,9 +51,9 @@ class PrefixRankedBarPattern : public RankedTreeBase, public std::Components < P
 public:
 	explicit PrefixRankedBarPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree );
-	explicit PrefixRankedBarPattern ( const PrefixRankedBarTree < > & tree );
-	explicit PrefixRankedBarPattern ( const RankedPattern < > & tree );
+	explicit PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarPattern ( const RankedPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -134,15 +134,15 @@ PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( std::s
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree ) : PrefixRankedBarPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), barBase, variablesBar ) ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const PrefixRankedBarTree < > & tree ) : PrefixRankedBarPattern ( tree.getBars() + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( tree.getBars() + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const RankedPattern < > & tree ) : PrefixRankedBarPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 58b1b2a67d..6b560bf189 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -47,7 +47,7 @@ class PrefixRankedBarTree : public RankedTreeBase, public std::Components < Pref
 public:
 	explicit PrefixRankedBarTree ( std::set < std::ranked_symbol < SymbolType, RankType > > bars, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarTree ( std::set < std::ranked_symbol < SymbolType, RankType > > bars, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarTree ( SymbolType barBase, const RankedTree < > & tree );
+	explicit PrefixRankedBarTree ( SymbolType barBase, const RankedTree < SymbolType, RankType > & tree );
 	explicit PrefixRankedBarTree ( const RankedTree < > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
@@ -120,7 +120,7 @@ PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( std::set < s
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( SymbolType barBase, const RankedTree < > & tree ) : PrefixRankedBarTree ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), toPrefixRankedBar ( tree.getContent ( ), barBase ) ) {
+PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( SymbolType barBase, const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarTree ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), toPrefixRankedBar ( tree.getContent ( ), barBase ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 6e19b4a2f6..e29d8c7081 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -48,11 +48,11 @@ public:
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedNonlinearPattern ( const PrefixRankedTree < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const PrefixRankedPattern < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedTree < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedPattern < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < > & tree );
+	explicit PrefixRankedNonlinearPattern ( const PrefixRankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const PrefixRankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -136,23 +136,23 @@ PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPatt
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedTree < > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedTree < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedTree < > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index b00f9fb82d..2480d6a81d 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -46,8 +46,8 @@ class PrefixRankedPattern : public RankedTreeBase, public std::Components < Pref
 public:
 	explicit PrefixRankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedPattern ( const PrefixRankedTree < > & tree );
-	explicit PrefixRankedPattern ( const RankedPattern < > & tree );
+	explicit PrefixRankedPattern ( const PrefixRankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedPattern ( const RankedPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -120,11 +120,11 @@ PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( std::ranked_
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const PrefixRankedTree < > & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const PrefixRankedTree < SymbolType, RankType > & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const RankedPattern < > & tree ) : PrefixRankedPattern ( tree.getSubtreeWildcard ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedPattern ( tree.getSubtreeWildcard ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index bc5ebc06e1..fcb73f78e0 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -43,7 +43,7 @@ class PrefixRankedTree : public RankedTreeBase, public std::Components < PrefixR
 public:
 	explicit PrefixRankedTree ( std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedTree ( std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedTree ( const RankedTree < > & tree );
+	explicit PrefixRankedTree ( const RankedTree < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -111,7 +111,7 @@ PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( std::vector < std:
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( const RankedTree < > & tree ) : PrefixRankedTree ( tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedTree ( tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index 41856f9285..464c70c8c5 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -59,7 +59,7 @@ public:
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
-	explicit RankedNonlinearPattern ( const UnrankedNonlinearPattern < > & other );
+	explicit RankedNonlinearPattern ( const UnrankedNonlinearPattern < SymbolType > & other );
 
 	/**
 	 * @return Root node of the regular expression pattern
@@ -141,7 +141,7 @@ RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( std::r
 }
 
 template < class SymbolType, class RankType >
-RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( const UnrankedNonlinearPattern < > & other ) : RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( const UnrankedNonlinearPattern < SymbolType > & other ) : RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index 7bdd11ddfd..527ff6dd08 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -57,7 +57,7 @@ public:
 
 	explicit RankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
-	explicit RankedPattern ( const UnrankedPattern < > & other );
+	explicit RankedPattern ( const UnrankedPattern < SymbolType > & other );
 
 	/**
 	 * @return Root node of the regular expression pattern
@@ -131,7 +131,7 @@ RankedPattern < SymbolType, RankType >::RankedPattern ( std::ranked_symbol < Sym
 }
 
 template < class SymbolType, class RankType >
-RankedPattern < SymbolType, RankType >::RankedPattern ( const UnrankedPattern < > & other ) : RankedPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+RankedPattern < SymbolType, RankType >::RankedPattern ( const UnrankedPattern < SymbolType > & other ) : RankedPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index 073b450a81..d6e45fed68 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -56,7 +56,8 @@ public:
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::set < SymbolType > nonlinearVariables, std::set < SymbolType > alphabet, std::tree < SymbolType > pattern );
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::set < SymbolType > nonlinearVariables, std::tree < SymbolType > pattern );
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::tree < SymbolType > pattern );
-	explicit UnrankedNonlinearPattern ( const RankedNonlinearPattern < > & other );
+	template < class RankType >
+	explicit UnrankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & other );
 
 	/**
 	 * @return Content of the pattern
@@ -143,7 +144,8 @@ UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( SymbolType s
 }
 
 template < class SymbolType >
-UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( const RankedNonlinearPattern < > & other ) : UnrankedNonlinearPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & other ) : UnrankedNonlinearPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 9baa2acc4f..09a89e49f2 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -54,7 +54,8 @@ public:
 
 	explicit UnrankedPattern ( SymbolType subtreeWildcard, std::set < SymbolType > alphabet, std::tree < SymbolType > pattern );
 	explicit UnrankedPattern ( SymbolType subtreeWildcard, std::tree < SymbolType > pattern );
-	explicit UnrankedPattern ( const RankedPattern < > & other );
+	template < class RankType >
+	explicit UnrankedPattern ( const RankedPattern < SymbolType, RankType > & other );
 
 	/**
 	 * @return Content of the pattern
@@ -127,7 +128,8 @@ UnrankedPattern < SymbolType >::UnrankedPattern ( SymbolType subtreeWildcard, st
 }
 
 template < class SymbolType >
-UnrankedPattern < SymbolType >::UnrankedPattern ( const RankedPattern < > & other ) : UnrankedPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedPattern < SymbolType >::UnrankedPattern ( const RankedPattern < SymbolType, RankType > & other ) : UnrankedPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 403bef5a97..f9a4825b89 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -53,7 +53,8 @@ public:
 
 	explicit UnrankedTree ( std::set < SymbolType > alphabet, std::tree < SymbolType > tree );
 	explicit UnrankedTree ( std::tree < SymbolType > tree );
-	explicit UnrankedTree ( const RankedTree < > & other );
+	template < class RankType >
+	explicit UnrankedTree ( const RankedTree < SymbolType, RankType > & other );
 
 	const std::set < SymbolType > & getAlphabet ( ) const {
 		return this->template accessComponent < GeneralAlphabet > ( ).get ( );
@@ -122,7 +123,8 @@ UnrankedTree < SymbolType >::UnrankedTree ( std::tree < SymbolType > pattern ) :
 }
 
 template < class SymbolType >
-UnrankedTree < SymbolType >::UnrankedTree ( const RankedTree < > & other ) : UnrankedTree ( TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedTree < SymbolType >::UnrankedTree ( const RankedTree < SymbolType, RankType > & other ) : UnrankedTree ( TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >
-- 
GitLab