From 8219e470f1043bab219ad2ebaf24eec56b7faa46 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 13 May 2016 21:01:22 +0200
Subject: [PATCH] issue76fix_proposal

---
 alib2std/src/extensions/type_traits.hpp       | 27 -------------
 .../{type_traits.cpp => typeinfo.cpp}         |  2 +-
 alib2std/src/extensions/typeinfo.hpp          | 38 +++++++++++++++++++
 alib2std/src/type_traits                      |  5 ---
 alib2std/src/typeinfo                         | 12 ++++++
 5 files changed, 51 insertions(+), 33 deletions(-)
 rename alib2std/src/extensions/{type_traits.cpp => typeinfo.cpp} (93%)
 create mode 100644 alib2std/src/extensions/typeinfo.hpp
 create mode 100644 alib2std/src/typeinfo

diff --git a/alib2std/src/extensions/type_traits.hpp b/alib2std/src/extensions/type_traits.hpp
index 73c3060610..09755ae36c 100644
--- a/alib2std/src/extensions/type_traits.hpp
+++ b/alib2std/src/extensions/type_traits.hpp
@@ -45,33 +45,6 @@ namespace std {
 		typedef typename get_type_pack_element < N - 1, Ts ... >::type type;
 	};
 
-	template<typename T>
-	bool is_same_type(const char* name) {
-		int status;
-
-		char namespaceId[100];
-		char classId[100];
-		char* ret = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status);
-		sscanf(ret, "%[a-zA-Z]::%[a-zA-Z]", namespaceId, classId);
-		free( ret );
-
-		if(strcmp(classId, name) == 0) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	template <class T>
-	char* type_name() {
-		int status;
-
-		return abi::__cxa_demangle(typeid(T).name(), 0, 0, &status);
-	}
-
-	char* type_name(const std::type_info& type);
-	char* type_name(const std::type_index& type);
-
 } /* namespace std */
 
 #endif // TYPE_TRAITS_HPP_
diff --git a/alib2std/src/extensions/type_traits.cpp b/alib2std/src/extensions/typeinfo.cpp
similarity index 93%
rename from alib2std/src/extensions/type_traits.cpp
rename to alib2std/src/extensions/typeinfo.cpp
index 1d30d3ae2e..d14ebcc03d 100644
--- a/alib2std/src/extensions/type_traits.cpp
+++ b/alib2std/src/extensions/typeinfo.cpp
@@ -5,7 +5,7 @@
  * Author: Jan Travnicek
  */
 
-#include "../type_traits"
+#include "../typeinfo"
 
 namespace std {
 
diff --git a/alib2std/src/extensions/typeinfo.hpp b/alib2std/src/extensions/typeinfo.hpp
new file mode 100644
index 0000000000..25371b7bb9
--- /dev/null
+++ b/alib2std/src/extensions/typeinfo.hpp
@@ -0,0 +1,38 @@
+/*
+ * typeindex.hpp
+ *
+ * Created on: Apr 1, 2013
+ * Author: Jan Travnicek
+ */
+
+#ifndef TYPEINFO_H_
+#define TYPEINFO_H_
+
+namespace std {
+
+	char* type_name(const std::type_info& type);
+	char* type_name(const std::type_index& type);
+
+	template <class T>
+	char* type_name() {
+		return type_name(typeid(T));
+	}
+
+	template<typename T>
+	bool is_same_type(const char* name) {
+		char namespaceId[100];
+		char classId[100];
+		char* ret = type_name<T>();
+		sscanf(ret, "%[a-zA-Z]::%[a-zA-Z]", namespaceId, classId);
+		free( ret );
+
+		if(strcmp(classId, name) == 0) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+}
+
+#endif // ifndef TYPEINFO_H_
diff --git a/alib2std/src/type_traits b/alib2std/src/type_traits
index 1fcebfe869..c612cf162b 100644
--- a/alib2std/src/type_traits
+++ b/alib2std/src/type_traits
@@ -2,11 +2,6 @@
 #define __TYPE_TRAITS_HEADER_WRAPPER_
 
 #include <bits/../type_traits>
-#include <cxxabi.h>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <typeindex>
 #include "extensions/type_traits.hpp"
 
 #endif /* __TYPE_TRAITS_HEADER_WRAPPER_ */
diff --git a/alib2std/src/typeinfo b/alib2std/src/typeinfo
new file mode 100644
index 0000000000..7885373e35
--- /dev/null
+++ b/alib2std/src/typeinfo
@@ -0,0 +1,12 @@
+#ifndef __TYPEINFO_HEADER_WRAPPER_
+#define __TYPEINFO_HEADER_WRAPPER_
+
+#include <bits/../typeinfo>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cxxabi.h>
+#include "typeindex"
+#include "extensions/typeinfo.hpp"
+
+#endif /* __TYPEINFO_HEADER_WRAPPER_ */
-- 
GitLab