From 8de2be73f583238f50a46694719a4bf350d730d9 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 10 Apr 2015 20:27:15 +0200
Subject: [PATCH] make operator std::string explicit

---
 aconvert2/src/GasTexConverter.cpp                    | 12 ++++++------
 alib2algo/src/common/StringContainerConverter.hpp    |  9 +++------
 alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp |  5 ++++-
 .../src/regexp/convert/ToGrammarRightRGGlushkov.cpp  |  5 ++++-
 alib2data/src/alphabet/BarSymbol.h                   |  2 +-
 alib2data/src/alphabet/BlankSymbol.h                 |  2 +-
 alib2data/src/alphabet/BottomOfTheStackSymbol.h      |  2 +-
 alib2data/src/alphabet/EndSymbol.h                   |  2 +-
 alib2data/src/alphabet/LabeledSymbol.h               |  2 +-
 alib2data/src/alphabet/RankedBarSymbol.h             |  2 +-
 alib2data/src/alphabet/RankedSymbol.h                |  2 +-
 alib2data/src/alphabet/StartSymbol.h                 |  2 +-
 alib2data/src/alphabet/SubtreeWildcardSymbol.h       |  2 +-
 alib2data/src/alphabet/SymbolPairSymbol.h            |  2 +-
 alib2data/src/alphabet/SymbolSetSymbol.h             |  2 +-
 alib2data/src/alphabet/UniqueSymbol.h                |  2 +-
 alib2data/src/automaton/FSM/CompactNFA.h             |  2 +-
 alib2data/src/automaton/FSM/DFA.h                    | 10 +++++-----
 alib2data/src/automaton/FSM/EpsilonNFA.h             |  2 +-
 alib2data/src/automaton/FSM/ExtendedNFA.h            |  2 +-
 alib2data/src/automaton/FSM/MultiInitialStateNFA.h   |  2 +-
 alib2data/src/automaton/FSM/NFA.h                    |  2 +-
 alib2data/src/automaton/PDA/DPDA.h                   |  2 +-
 alib2data/src/automaton/PDA/InputDrivenDPDA.h        |  2 +-
 alib2data/src/automaton/PDA/InputDrivenNPDA.h        |  2 +-
 alib2data/src/automaton/PDA/NPDA.h                   |  2 +-
 .../automaton/PDA/RealTimeHeightDeterministicDPDA.h  |  2 +-
 .../automaton/PDA/RealTimeHeightDeterministicNPDA.h  |  2 +-
 alib2data/src/automaton/PDA/SinglePopDPDA.h          |  2 +-
 alib2data/src/automaton/PDA/SinglePopNPDA.h          |  2 +-
 alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h    |  2 +-
 alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h    |  2 +-
 alib2data/src/automaton/TM/OneTapeDTM.h              |  2 +-
 alib2data/src/automaton/common/State.h               |  2 +-
 alib2data/src/common/base.hpp                        |  2 +-
 alib2data/src/common/wrapper.hpp                     |  2 +-
 alib2data/src/container/ObjectsMap.h                 |  2 +-
 alib2data/src/container/ObjectsPair.h                |  2 +-
 alib2data/src/container/ObjectsSet.h                 |  2 +-
 alib2data/src/container/ObjectsVector.h              |  2 +-
 alib2data/src/exception/AlibException.h              |  2 +-
 alib2data/src/grammar/ContextFree/CFG.h              |  2 +-
 alib2data/src/grammar/ContextFree/CNF.h              |  2 +-
 alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h   |  2 +-
 alib2data/src/grammar/ContextFree/GNF.h              |  2 +-
 alib2data/src/grammar/ContextFree/LG.h               |  2 +-
 alib2data/src/grammar/ContextSensitive/CSG.h         |  2 +-
 .../grammar/ContextSensitive/NonContractingGrammar.h |  2 +-
 alib2data/src/grammar/Regular/LeftLG.h               |  2 +-
 alib2data/src/grammar/Regular/LeftRG.h               |  2 +-
 alib2data/src/grammar/Regular/RightLG.h              |  2 +-
 alib2data/src/grammar/Regular/RightRG.h              |  2 +-
 .../ContextPreservingUnrestrictedGrammar.h           |  2 +-
 .../src/grammar/Unrestricted/UnrestrictedGrammar.h   |  2 +-
 alib2data/src/graph/common/Node.h                    |  2 +-
 alib2data/src/graph/directed/DirectedEdge.h          |  2 +-
 alib2data/src/graph/directed/DirectedGraph.h         |  2 +-
 alib2data/src/graph/directed/IDirectedGraph.h        |  2 +-
 alib2data/src/graph/undirected/IUndirectedGraph.h    |  2 +-
 alib2data/src/graph/undirected/UndirectedEdge.h      |  2 +-
 alib2data/src/graph/undirected/UndirectedGraph.h     |  2 +-
 alib2data/src/label/HexavigesimalLabel.h             |  2 +-
 alib2data/src/label/LabelPairLabel.h                 |  2 +-
 alib2data/src/label/LabelSetLabel.h                  |  2 +-
 alib2data/src/label/ObjectLabel.h                    |  2 +-
 alib2data/src/label/PrimitiveLabel.h                 |  2 +-
 alib2data/src/label/UniqueLabel.h                    |  2 +-
 alib2data/src/object/Void.h                          |  2 +-
 alib2data/src/primitive/Bool.h                       |  2 +-
 alib2data/src/primitive/Character.h                  |  2 +-
 alib2data/src/primitive/Integer.h                    |  2 +-
 alib2data/src/primitive/String.h                     |  2 +-
 alib2data/src/primitive/Unsigned.h                   |  2 +-
 alib2data/src/regexp/formal/FormalRegExp.h           |  2 +-
 .../src/regexp/formal/FormalRegExpAlternation.h      |  2 +-
 .../src/regexp/formal/FormalRegExpConcatenation.h    |  2 +-
 alib2data/src/regexp/formal/FormalRegExpEmpty.h      |  2 +-
 alib2data/src/regexp/formal/FormalRegExpEpsilon.h    |  2 +-
 alib2data/src/regexp/formal/FormalRegExpIteration.h  |  2 +-
 alib2data/src/regexp/formal/FormalRegExpSymbol.h     |  2 +-
 alib2data/src/regexp/unbounded/UnboundedRegExp.h     |  2 +-
 .../regexp/unbounded/UnboundedRegExpAlternation.h    |  2 +-
 .../regexp/unbounded/UnboundedRegExpConcatenation.h  |  2 +-
 .../src/regexp/unbounded/UnboundedRegExpEmpty.h      |  2 +-
 .../src/regexp/unbounded/UnboundedRegExpEpsilon.h    |  2 +-
 .../src/regexp/unbounded/UnboundedRegExpIteration.h  |  2 +-
 .../src/regexp/unbounded/UnboundedRegExpSymbol.h     |  2 +-
 alib2data/src/sax/Token.h                            |  2 +-
 alib2data/src/std/variant.hpp                        |  2 +-
 alib2data/src/string/CyclicString.h                  |  2 +-
 alib2data/src/string/Epsilon.h                       |  2 +-
 alib2data/src/string/LinearString.h                  |  2 +-
 92 files changed, 109 insertions(+), 106 deletions(-)

diff --git a/aconvert2/src/GasTexConverter.cpp b/aconvert2/src/GasTexConverter.cpp
index e72eeec23c..d8635bcbe1 100644
--- a/aconvert2/src/GasTexConverter.cpp
+++ b/aconvert2/src/GasTexConverter.cpp
@@ -744,7 +744,7 @@ void GasTexConverter::transitions(const automaton::EpsilonNFA& fsm, std::ostream
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol;
 			if (transition.first.second.is<string::Epsilon>()) {
@@ -768,7 +768,7 @@ void GasTexConverter::transitions(const automaton::MultiInitialStateNFA& fsm, st
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = (std::string) transition.first.second;
 
@@ -787,7 +787,7 @@ void GasTexConverter::transitions(const automaton::NFA& fsm, std::ostream& out)
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = (std::string) transition.first.second;
 
@@ -805,7 +805,7 @@ void GasTexConverter::transitions(const automaton::NFA& fsm, std::ostream& out)
 void GasTexConverter::transitions(const automaton::DFA& fsm, std::ostream& out) {
 	std::map<std::pair<std::string, std::string>, std::string> transitionMap;
 	for (const auto& transition : fsm.getTransitions()) {
-		std::pair<std::string, std::string> key(transition.first.first.getName(), transition.second.getName());
+		std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) transition.second.getName());
 
 		std::string symbol = (std::string) transition.first.second;
 
@@ -824,7 +824,7 @@ void GasTexConverter::transitions(const automaton::ExtendedNFA& fsm, std::ostrea
 
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = alib::StringDataFactory::toString(transition.first.second);
 
@@ -844,7 +844,7 @@ void GasTexConverter::transitions(const automaton::CompactNFA& fsm, std::ostream
 
 	for (const auto& transition : fsm.getTransitions()) {
 		for(const auto& to : transition.second) {
-			std::pair<std::string, std::string> key(transition.first.first.getName(), to.getName());
+			std::pair<std::string, std::string> key((std::string) transition.first.first.getName(), (std::string) to.getName());
 
 			std::string symbol = alib::StringDataFactory::toString(string::String(transition.first.second));
 
diff --git a/alib2algo/src/common/StringContainerConverter.hpp b/alib2algo/src/common/StringContainerConverter.hpp
index 4e08635d39..e37a80ef87 100644
--- a/alib2algo/src/common/StringContainerConverter.hpp
+++ b/alib2algo/src/common/StringContainerConverter.hpp
@@ -67,8 +67,7 @@ inline void VisitHelper(void* data, const string::Epsilon& text) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::Epsilon& text) const {
-	T* & out = *((T**) data);
-	out = new T(text);
+	VisitHelper<R, S, T>(data, text);
 }
 
 
@@ -88,8 +87,7 @@ inline void VisitHelper(void* data, const string::LinearString& text) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::LinearString& text) const {
-	T* & out = *((T**) data);
-	out = new T(text);
+	VisitHelper<R, S, T>(data, text);
 }
 
 
@@ -109,8 +107,7 @@ inline void VisitHelper(void*, const string::CyclicString&) {
 
 template<class R, class S, class T>
 void StringContainerConverter<R, S, T>::Visit(void* data, const string::CyclicString& text) const {
-	T* & out = *((T**) data);
-	out = new T(text); //TODO tohle by melo vyhodit kompilacni chybu pro T = string::LinearString ale nehodi ...
+	VisitHelper<R, S, T>(data, text);
 }
 
 
diff --git a/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
index 7c47c7a4c1..d74cc963c3 100644
--- a/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
@@ -9,6 +9,9 @@
 
 #include "label/Label.h"
 #include "label/LabelPairLabel.h"
+#include "label/ObjectLabel.h"
+
+#include "object/Object.h"
 
 #include "../GlushkovTraversal.h"
 #include "../GlushkovPair.h"
@@ -50,7 +53,7 @@ automaton::NFA ToAutomatonGlushkov::convert(const regexp::UnboundedRegExp& regex
 	std::map<regexp::GlushkovSymbol, automaton::State> stateMap;
 
 	for( auto const& symbol : regexp::GlushkovTraversal::getSymbols( regexp ) ) {
-		automaton::State q( label::Label( label::LabelPairLabel( std::make_pair( label::labelFrom( symbol.getInputSymbol( ) ), label::labelFrom( symbol.getId( ) ) ) ) ) );
+		automaton::State q( label::Label( label::LabelPairLabel( std::make_pair( label::Label( label::ObjectLabel( alib::Object( symbol.getInputSymbol( ).getData() ) ) ), label::labelFrom( symbol.getId( ) ) ) ) ) );
 
 		stateMap.insert( std::make_pair( symbol, q ) );
 		automaton.addState( q );
diff --git a/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
index 7821ef3a9e..f2769c6633 100644
--- a/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
@@ -12,6 +12,9 @@
 #include <alphabet/LabeledSymbol.h>
 
 #include <label/LabelPairLabel.h>
+#include <label/ObjectLabel.h>
+
+#include <object/Object.h>
 
 #include "../GlushkovTraversal.h"
 #include "../GlushkovPair.h"
@@ -54,7 +57,7 @@ grammar::RightRG ToGrammarRightRGGlushkov::convert(const regexp::UnboundedRegExp
 
 	for(const auto& symbol : regexp::GlushkovTraversal::getSymbols(regexp))
 	{
-		alphabet::Symbol nt(alphabet::LabeledSymbol(label::Label(label::LabelPairLabel(std::make_pair(label::labelFrom(symbol.getInputSymbol()), label::labelFrom(symbol.getId()))))));
+		alphabet::Symbol nt(alphabet::LabeledSymbol(label::Label(label::LabelPairLabel(std::make_pair(label::Label( label::ObjectLabel( alib::Object( symbol.getInputSymbol( ).getData() ) ) ), label::labelFrom(symbol.getId()))))));
 		symbolMap.insert(std::make_pair(symbol, nt));
 		grammar.addNonterminalSymbol(nt);
 	}
diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h
index 4e8daaaf62..9b928307da 100644
--- a/alib2data/src/alphabet/BarSymbol.h
+++ b/alib2data/src/alphabet/BarSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BarSymbol>();
diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h
index bf7f2d1312..818eee2cfb 100644
--- a/alib2data/src/alphabet/BlankSymbol.h
+++ b/alib2data/src/alphabet/BlankSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BlankSymbol>();
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
index 99abe4f709..61c93e15d8 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<BottomOfTheStackSymbol>();
diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h
index 50a735a324..e2edbd994f 100644
--- a/alib2data/src/alphabet/EndSymbol.h
+++ b/alib2data/src/alphabet/EndSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<EndSymbol>();
diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h
index 9e8192ed09..a7bd502ed9 100644
--- a/alib2data/src/alphabet/LabeledSymbol.h
+++ b/alib2data/src/alphabet/LabeledSymbol.h
@@ -49,7 +49,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabeledSymbol>();
diff --git a/alib2data/src/alphabet/RankedBarSymbol.h b/alib2data/src/alphabet/RankedBarSymbol.h
index bbd6fa8acd..4c6479bb3d 100644
--- a/alib2data/src/alphabet/RankedBarSymbol.h
+++ b/alib2data/src/alphabet/RankedBarSymbol.h
@@ -42,7 +42,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RankedBarSymbol>();
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index 0b4d86a0ab..aab04969a5 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -57,7 +57,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RankedSymbol>();
diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h
index 4cab940a1a..b22b5bd13e 100644
--- a/alib2data/src/alphabet/StartSymbol.h
+++ b/alib2data/src/alphabet/StartSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<StartSymbol>();
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
index 6c1480a898..a8facf57ee 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SubtreeWildcardSymbol>();
diff --git a/alib2data/src/alphabet/SymbolPairSymbol.h b/alib2data/src/alphabet/SymbolPairSymbol.h
index 80f435d04f..eea27dc43b 100644
--- a/alib2data/src/alphabet/SymbolPairSymbol.h
+++ b/alib2data/src/alphabet/SymbolPairSymbol.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SymbolPairSymbol>();
diff --git a/alib2data/src/alphabet/SymbolSetSymbol.h b/alib2data/src/alphabet/SymbolSetSymbol.h
index a07cebf680..99596f2254 100644
--- a/alib2data/src/alphabet/SymbolSetSymbol.h
+++ b/alib2data/src/alphabet/SymbolSetSymbol.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<SymbolSetSymbol>();
diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h
index 7c8e95a85e..e8d75a7887 100644
--- a/alib2data/src/alphabet/UniqueSymbol.h
+++ b/alib2data/src/alphabet/UniqueSymbol.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UniqueSymbol>();
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 26c8e8be07..0650bf0423 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -87,7 +87,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<CompactNFA>();
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index b0552f6d68..3264fd3c7b 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -27,7 +27,7 @@ public:
 	explicit DFA(const State& initialState);
 
 	virtual AutomatonBase* clone() const;
-	
+
 	virtual AutomatonBase* plunder() &&;
 
 	/**
@@ -39,7 +39,7 @@ public:
 	 * @copydoc Automaton::removeInputSymbol(const Symbol&)
 	 */
 	virtual bool removeInputSymbol(const alphabet::Symbol& symbol);
-	
+
 	/**
 	 * Adds transition defined by parameters to the automaton.
 	 * @param current current state
@@ -65,7 +65,7 @@ public:
 	 * @return automaton transitions from state
 	 */
 	std::map<std::pair<State, alphabet::Symbol>, State> getTransitionsFromState(const State& from) const;
-	
+
 	/**
 	 * @return automaton transitions to state
 	 */
@@ -85,10 +85,10 @@ public:
 	}
 
 	virtual int compare(const DFA& other) const;
-	
+
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<DFA>();
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index 28fad8d46e..807727492d 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -166,7 +166,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<EpsilonNFA>();
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index 16fd38b603..4bd0833573 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -89,7 +89,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ExtendedNFA>();
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index 48bda23aa7..1bb49a341e 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -105,7 +105,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<MultiInitialStateNFA>();
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index 3d4bad88ec..50c88650e1 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -103,7 +103,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<NFA>();
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index d7332569ca..534252094a 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -99,7 +99,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<DPDA>();
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index 4d92e00439..085931f95e 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -98,7 +98,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<InputDrivenDPDA>();
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index 75159d0a7c..2ba69787a7 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -97,7 +97,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<InputDrivenNPDA>();
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index 0725489c60..da6e75e17f 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -85,7 +85,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<NPDA>();
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 64e9ea3ccd..37156ecf5d 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -126,7 +126,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<RealTimeHeightDeterministicDPDA>();
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index 21e85c58d4..4f81eba7af 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -126,7 +126,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<RealTimeHeightDeterministicNPDA>();
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index 3ac5eca2d4..f79eb5fdfd 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -89,7 +89,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<SinglePopDPDA>();
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index 9830da0869..4c5b5d3864 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -85,7 +85,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<SinglePopNPDA>();
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 0aa8958edb..cda77c82af 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -112,7 +112,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<VisiblyPushdownDPDA>();
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index 3f22b8c4d2..d6faa402c3 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -112,7 +112,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<VisiblyPushdownNPDA>();
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index 0418689019..9ee3d33169 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -81,7 +81,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<OneTapeDTM>();
diff --git a/alib2data/src/automaton/common/State.h b/alib2data/src/automaton/common/State.h
index 2835b3a556..c2fc2c8c95 100644
--- a/alib2data/src/automaton/common/State.h
+++ b/alib2data/src/automaton/common/State.h
@@ -39,7 +39,7 @@ public:
 
 	friend std::ostream& operator<<(std::ostream&, const State&);
 
-	operator std::string () const;
+	explicit operator std::string () const;
 };
 
 } /* namespace automaton */
diff --git a/alib2data/src/common/base.hpp b/alib2data/src/common/base.hpp
index e6e86ab01d..8fa2fcc330 100644
--- a/alib2data/src/common/base.hpp
+++ b/alib2data/src/common/base.hpp
@@ -109,7 +109,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const = 0;
 
-	virtual operator std::string () const = 0;
+	virtual explicit operator std::string () const = 0;
 };
 
 } /* namespace alib */
diff --git a/alib2data/src/common/wrapper.hpp b/alib2data/src/common/wrapper.hpp
index fb053875c0..c0093ba42f 100644
--- a/alib2data/src/common/wrapper.hpp
+++ b/alib2data/src/common/wrapper.hpp
@@ -99,7 +99,7 @@ public:
 		return os;
 	}
 
-	operator std::string () const {
+	explicit operator std::string () const {
 		return (std::string) *data;
 	}
 };
diff --git a/alib2data/src/container/ObjectsMap.h b/alib2data/src/container/ObjectsMap.h
index de194f0937..c4d7aa4ca2 100644
--- a/alib2data/src/container/ObjectsMap.h
+++ b/alib2data/src/container/ObjectsMap.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsMap>();
diff --git a/alib2data/src/container/ObjectsPair.h b/alib2data/src/container/ObjectsPair.h
index 28bd4a1289..e6a0dbb77c 100644
--- a/alib2data/src/container/ObjectsPair.h
+++ b/alib2data/src/container/ObjectsPair.h
@@ -36,7 +36,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsPair>();
diff --git a/alib2data/src/container/ObjectsSet.h b/alib2data/src/container/ObjectsSet.h
index 4ee7de42c8..16747c020c 100644
--- a/alib2data/src/container/ObjectsSet.h
+++ b/alib2data/src/container/ObjectsSet.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsSet>();
diff --git a/alib2data/src/container/ObjectsVector.h b/alib2data/src/container/ObjectsVector.h
index ca64be8673..1c88f62645 100644
--- a/alib2data/src/container/ObjectsVector.h
+++ b/alib2data/src/container/ObjectsVector.h
@@ -34,7 +34,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectsVector>();
diff --git a/alib2data/src/exception/AlibException.h b/alib2data/src/exception/AlibException.h
index 7feee65081..7b3007ac43 100644
--- a/alib2data/src/exception/AlibException.h
+++ b/alib2data/src/exception/AlibException.h
@@ -61,7 +61,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<AlibException>();
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index f995b96a6a..a9611d56f5 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -55,7 +55,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CFG>();
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 5e1ddfa933..2f807a6659 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -64,7 +64,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CNF>();
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index a5382fadb1..6166994faa 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<EpsilonFreeCFG>();
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 08b12ff8a6..6806ea3c98 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<GNF>();
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 322bac4bec..0f5fd6fd39 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -60,7 +60,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LG>();
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index e4baa92f68..52b5b20735 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<CSG>();
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index 37e32edd57..66f957e5f4 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<NonContractingGrammar>();
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index 1c662378e8..6998aca04c 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LeftLG>();
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index de7ddb40c6..12d46b2b2c 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -143,7 +143,7 @@ public:
 	/**
 	 * casts this instance to as compact as possible string representation
 	 */
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	/**
 	 * @copydoc alib::base_base::selfTypeId
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index cef83c1fb4..35ca0cdca0 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -59,7 +59,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RightLG>();
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index d28cc62c79..de21f7c2d7 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -79,7 +79,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<RightRG>();
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index 4de7f9fd18..2668aa83de 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<ContextPreservingUnrestrictedGrammar>();
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index bb77683355..55761fd07e 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream& os) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnrestrictedGrammar>();
diff --git a/alib2data/src/graph/common/Node.h b/alib2data/src/graph/common/Node.h
index 93fe69b1d8..3016a938fa 100644
--- a/alib2data/src/graph/common/Node.h
+++ b/alib2data/src/graph/common/Node.h
@@ -36,7 +36,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/DirectedEdge.h b/alib2data/src/graph/directed/DirectedEdge.h
index 65d773d72b..75b1a34602 100644
--- a/alib2data/src/graph/directed/DirectedEdge.h
+++ b/alib2data/src/graph/directed/DirectedEdge.h
@@ -43,7 +43,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/DirectedGraph.h b/alib2data/src/graph/directed/DirectedGraph.h
index 5aa24d5703..dc6ff344e6 100644
--- a/alib2data/src/graph/directed/DirectedGraph.h
+++ b/alib2data/src/graph/directed/DirectedGraph.h
@@ -64,7 +64,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/directed/IDirectedGraph.h b/alib2data/src/graph/directed/IDirectedGraph.h
index 163c376b0b..6e8145b2b5 100644
--- a/alib2data/src/graph/directed/IDirectedGraph.h
+++ b/alib2data/src/graph/directed/IDirectedGraph.h
@@ -34,7 +34,7 @@ public:
 	virtual void copy(IDirectedGraph *other) = 0;
 	virtual int compare(IDirectedGraph *other) const = 0;
 
-	operator std::string() const;
+	explicit operator std::string() const;
 };
 
 } // namespace graph
diff --git a/alib2data/src/graph/undirected/IUndirectedGraph.h b/alib2data/src/graph/undirected/IUndirectedGraph.h
index 3e0ad5aacc..c3d70d87a4 100644
--- a/alib2data/src/graph/undirected/IUndirectedGraph.h
+++ b/alib2data/src/graph/undirected/IUndirectedGraph.h
@@ -34,7 +34,7 @@ public:
 	virtual void copy(IUndirectedGraph *other) = 0;
 	virtual int compare(IUndirectedGraph *other) const = 0;
 
-	operator std::string() const;
+	explicit operator std::string() const;
 };
 
 } // namespace graph
diff --git a/alib2data/src/graph/undirected/UndirectedEdge.h b/alib2data/src/graph/undirected/UndirectedEdge.h
index 379300e591..b8c1b846ab 100644
--- a/alib2data/src/graph/undirected/UndirectedEdge.h
+++ b/alib2data/src/graph/undirected/UndirectedEdge.h
@@ -43,7 +43,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/graph/undirected/UndirectedGraph.h b/alib2data/src/graph/undirected/UndirectedGraph.h
index 0fc7dad5f0..b99bdb086b 100644
--- a/alib2data/src/graph/undirected/UndirectedGraph.h
+++ b/alib2data/src/graph/undirected/UndirectedGraph.h
@@ -64,7 +64,7 @@ public:
 
 	void operator>>(std::ostream &out) const override;
 
-	operator std::string() const override;
+	explicit operator std::string() const override;
 
 	int selfTypeId() const override
 	{
diff --git a/alib2data/src/label/HexavigesimalLabel.h b/alib2data/src/label/HexavigesimalLabel.h
index 465524b3c1..4f805ba062 100644
--- a/alib2data/src/label/HexavigesimalLabel.h
+++ b/alib2data/src/label/HexavigesimalLabel.h
@@ -46,7 +46,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<HexavigesimalLabel>();
diff --git a/alib2data/src/label/LabelPairLabel.h b/alib2data/src/label/LabelPairLabel.h
index 0c01b4228e..bc72f91946 100644
--- a/alib2data/src/label/LabelPairLabel.h
+++ b/alib2data/src/label/LabelPairLabel.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabelPairLabel>();
diff --git a/alib2data/src/label/LabelSetLabel.h b/alib2data/src/label/LabelSetLabel.h
index f9e393ef6b..2741e2dd80 100644
--- a/alib2data/src/label/LabelSetLabel.h
+++ b/alib2data/src/label/LabelSetLabel.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<LabelSetLabel>();
diff --git a/alib2data/src/label/ObjectLabel.h b/alib2data/src/label/ObjectLabel.h
index b435aeda59..37d27086f0 100644
--- a/alib2data/src/label/ObjectLabel.h
+++ b/alib2data/src/label/ObjectLabel.h
@@ -48,7 +48,7 @@ public:
 	
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<ObjectLabel>();
diff --git a/alib2data/src/label/PrimitiveLabel.h b/alib2data/src/label/PrimitiveLabel.h
index b783b06698..f8f572a269 100644
--- a/alib2data/src/label/PrimitiveLabel.h
+++ b/alib2data/src/label/PrimitiveLabel.h
@@ -48,7 +48,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<PrimitiveLabel>();
diff --git a/alib2data/src/label/UniqueLabel.h b/alib2data/src/label/UniqueLabel.h
index 872f49a94f..3b89b2c080 100644
--- a/alib2data/src/label/UniqueLabel.h
+++ b/alib2data/src/label/UniqueLabel.h
@@ -52,7 +52,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<UniqueLabel>();
diff --git a/alib2data/src/object/Void.h b/alib2data/src/object/Void.h
index 6c2eedcb35..bd1fa9f57a 100644
--- a/alib2data/src/object/Void.h
+++ b/alib2data/src/object/Void.h
@@ -36,7 +36,7 @@ public:
 
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<Void>();
diff --git a/alib2data/src/primitive/Bool.h b/alib2data/src/primitive/Bool.h
index c3dee8ace3..9561862a09 100644
--- a/alib2data/src/primitive/Bool.h
+++ b/alib2data/src/primitive/Bool.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Bool>();
diff --git a/alib2data/src/primitive/Character.h b/alib2data/src/primitive/Character.h
index 842a21a4f5..13aba2a13d 100644
--- a/alib2data/src/primitive/Character.h
+++ b/alib2data/src/primitive/Character.h
@@ -46,7 +46,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<Character>();
diff --git a/alib2data/src/primitive/Integer.h b/alib2data/src/primitive/Integer.h
index 88ee421be0..47c01dfdf1 100644
--- a/alib2data/src/primitive/Integer.h
+++ b/alib2data/src/primitive/Integer.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Integer>();
diff --git a/alib2data/src/primitive/String.h b/alib2data/src/primitive/String.h
index 0ceb083f34..48358e88f7 100644
--- a/alib2data/src/primitive/String.h
+++ b/alib2data/src/primitive/String.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string () const;
+	virtual explicit operator std::string () const;
 
 	virtual int selfTypeId() const {
 		return typeId<String>();
diff --git a/alib2data/src/primitive/Unsigned.h b/alib2data/src/primitive/Unsigned.h
index a6a11d6ad0..faa651f14f 100644
--- a/alib2data/src/primitive/Unsigned.h
+++ b/alib2data/src/primitive/Unsigned.h
@@ -45,7 +45,7 @@ public:
 
 	virtual void operator>>(std::ostream&) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<Unsigned>();
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index f8d705d9f6..3f986b0ffc 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -99,7 +99,7 @@ public:
 
 	virtual int compare(const FormalRegExp& other) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExp>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpAlternation.h b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
index b31853b98f..d2a90b6ecb 100644
--- a/alib2data/src/regexp/formal/FormalRegExpAlternation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
@@ -105,7 +105,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpAlternation>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
index 0b53a274e7..c64d9c9d88 100644
--- a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
@@ -103,7 +103,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpConcatenation>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpEmpty.h b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
index f4825479d5..62d91438d7 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEmpty.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
@@ -66,7 +66,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpEmpty>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
index 72c32e5afb..bc91013adc 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
@@ -67,7 +67,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpEpsilon>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpIteration.h b/alib2data/src/regexp/formal/FormalRegExpIteration.h
index ccd265a4b8..6a1e1d42f6 100644
--- a/alib2data/src/regexp/formal/FormalRegExpIteration.h
+++ b/alib2data/src/regexp/formal/FormalRegExpIteration.h
@@ -98,7 +98,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpIteration>();
diff --git a/alib2data/src/regexp/formal/FormalRegExpSymbol.h b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
index f504607179..3a7cd16d79 100644
--- a/alib2data/src/regexp/formal/FormalRegExpSymbol.h
+++ b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
@@ -83,7 +83,7 @@ public:
 	 */
 	const alphabet::Symbol& getSymbol() const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<FormalRegExpSymbol>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index 82f551be2f..3d2e654d31 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -99,7 +99,7 @@ public:
 
 	virtual int compare(const UnboundedRegExp& other) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExp>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
index f2c2faf69b..c250ab5247 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
@@ -99,7 +99,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpAlternation>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
index bee29e7164..b3b7031ad2 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
@@ -98,7 +98,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpConcatenation>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
index d978c92b90..eee6cccbe1 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
@@ -65,7 +65,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpEmpty>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
index ef72a8d2b3..fe478f502e 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
@@ -66,7 +66,7 @@ public:
 	 */
 	virtual void operator>>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpEpsilon>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
index 1c37dd4754..3fd2cff712 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
@@ -97,7 +97,7 @@ public:
 
 	friend class simplify::RegExpOptimize;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpIteration>();
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
index b567b01d04..e5bb25efde 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
@@ -82,7 +82,7 @@ public:
 	 */
 	const alphabet::Symbol& getSymbol() const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<UnboundedRegExpSymbol>();
diff --git a/alib2data/src/sax/Token.h b/alib2data/src/sax/Token.h
index 836b652806..dba8b50f7e 100644
--- a/alib2data/src/sax/Token.h
+++ b/alib2data/src/sax/Token.h
@@ -47,7 +47,7 @@ public:
 
 	friend std::ostream& operator<<(std::ostream& os, const Token& token);
 
-	operator std::string () const;
+	explicit operator std::string () const;
 };
 
 } /* namespace sax */
diff --git a/alib2data/src/std/variant.hpp b/alib2data/src/std/variant.hpp
index 7a6dc3bc10..7ffc722063 100644
--- a/alib2data/src/std/variant.hpp
+++ b/alib2data/src/std/variant.hpp
@@ -248,7 +248,7 @@ public:
 		return out;
 	}
 
-	operator std::string() const {
+	explicit operator std::string() const {
 		return helper_t::string(this->type_id, &this->data);
 	}
 };
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index b45a41ba9a..c97a433e25 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -63,7 +63,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<CyclicString>();
diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h
index e25f4806b6..30621a85c0 100644
--- a/alib2data/src/string/Epsilon.h
+++ b/alib2data/src/string/Epsilon.h
@@ -50,7 +50,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	static Epsilon EPSILON;
 
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index 05da8ee3d5..13675e8887 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -71,7 +71,7 @@ public:
 
 	virtual void operator >>(std::ostream& out) const;
 
-	virtual operator std::string() const;
+	virtual explicit operator std::string() const;
 
 	virtual int selfTypeId() const {
 		return typeId<LinearString>();
-- 
GitLab