diff --git a/alib2std/src/extensions/forward_tree.hpp b/alib2std/src/extensions/forward_tree.hpp
index 1960275517f4f9f2a32e45672edd707df5c9d4fb..6a5baabbf7f1ed75cffe36411753e2122601a118 100644
--- a/alib2std/src/extensions/forward_tree.hpp
+++ b/alib2std/src/extensions/forward_tree.hpp
@@ -427,7 +427,7 @@ private:
 		size_t insertedSize = end - begin;
 
 		if ( !arityChecker ( * under, children.size ( ) + insertedSize ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		std::vector < tree_node > inserted;
 
@@ -475,7 +475,7 @@ public:
 public:
 	forward_tree ( const T & data, const std::vector < forward_tree < T, ArityChecker > > & subtrees, ArityChecker arityChecker = ArityChecker ( ) ) : arityChecker ( arityChecker ), root ( data, fromTree ( subtrees ) ) {
 		if ( !arityChecker ( data, subtrees.size ( ) ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 	}
 
 	template < typename ... Types >
@@ -559,7 +559,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		children.push_back ( tree_node ( value, { } ) );
 	}
@@ -568,7 +568,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		children.push_back ( tree_node ( std::move ( value ), { } ) );
 	}
@@ -579,7 +579,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) - 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		typename std::vector < tree_node >::iterator iter = children.erase ( position.getUnderlyingIterator ( ) );
 		typename std::vector < tree_node >::const_iterator res = iter;
@@ -618,7 +618,7 @@ private:
 
 		SubscriptAccess & operator =( const T & data ) {
 			if ( !arityChecker ( data, node->getChildren ( ).size ( ) ) )
-				throw "Invalid number of children";
+				throw std::length_error ( "Invalid number of children" );
 
 			node->getData ( ) = data;
 
diff --git a/alib2std/src/extensions/tree.hpp b/alib2std/src/extensions/tree.hpp
index 0489c92cfc98f4cc136a9b62dae3172327077163..2a0a9170fc07ed709ed7166bcafcdc574eb3471b 100644
--- a/alib2std/src/extensions/tree.hpp
+++ b/alib2std/src/extensions/tree.hpp
@@ -444,7 +444,7 @@ private:
 		size_t insertedSize = end - begin;
 
 		if ( !arityChecker ( * under, children.size ( ) + insertedSize ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		std::vector < tree_node > inserted;
 
@@ -498,7 +498,7 @@ public:
 public:
 	tree ( const T & data, const std::vector < tree < T, ArityChecker > > & subtrees, ArityChecker arityChecker = ArityChecker ( ) ) : arityChecker ( arityChecker ), root ( data, fromTree ( subtrees ) ) {
 		if ( !arityChecker ( data, subtrees.size ( ) ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 	}
 
 	template < typename ... Types >
@@ -582,7 +582,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		children.push_back ( tree_node ( value, { } ) );
 		std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
@@ -592,7 +592,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		children.push_back ( tree_node ( std::move ( value ), { } ) );
 		std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
@@ -604,7 +604,7 @@ public:
 		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
 
 		if ( !arityChecker ( * under, children.size ( ) - 1 ) )
-			throw "Invalid number of children";
+			throw std::length_error ( "Invalid number of children" );
 
 		typename std::vector < tree_node >::iterator iter = children.erase ( position.getUnderlyingIterator ( ) );
 		typename std::vector < tree_node >::const_iterator res = iter;
@@ -643,7 +643,7 @@ private:
 
 		SubscriptAccess & operator =( const T & data ) {
 			if ( !arityChecker ( data, node->getChildren ( ).size ( ) ) )
-				throw "Invalid number of children";
+				throw std::length_error ( "Invalid number of children" );
 
 			node->getData ( ) = data;