From cfed1b3dbdd9acdb38d09ecbe94e51d5f4d65377 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 6 Mar 2018 22:19:17 +0100
Subject: [PATCH] fix undefined reference to allocator::allocator()

---
 alib2std/src/extensions/allocFix.hpp      | 23 +++++++++++++++++++++++
 alib2std/src/extensions/deque.hpp         |  3 ++-
 alib2std/src/extensions/forward_list.hpp  |  3 ++-
 alib2std/src/extensions/list.hpp          |  3 ++-
 alib2std/src/extensions/map.hpp           |  3 ++-
 alib2std/src/extensions/set.hpp           |  3 ++-
 alib2std/src/extensions/unordered_map.hpp |  3 ++-
 alib2std/src/extensions/vector.hpp        |  3 ++-
 8 files changed, 37 insertions(+), 7 deletions(-)
 create mode 100644 alib2std/src/extensions/allocFix.hpp

diff --git a/alib2std/src/extensions/allocFix.hpp b/alib2std/src/extensions/allocFix.hpp
new file mode 100644
index 0000000000..d8ad8005a3
--- /dev/null
+++ b/alib2std/src/extensions/allocFix.hpp
@@ -0,0 +1,23 @@
+/*
+ * allocFix.hpp
+ *
+ * Created on: Mar 6, 2018
+ * Author: Jan Travnicek
+ */
+
+#ifndef __ALLOC_FIX_HPP_
+#define __ALLOC_FIX_HPP_
+
+namespace ext {
+
+template < class Alloc >
+class AllocFix {
+public:
+	AllocFix ( ) {
+		static Alloc alloc;
+	}
+};
+
+} /* namespace ext */
+
+#endif /* __ALLOC_FIX_HPP_ */
diff --git a/alib2std/src/extensions/deque.hpp b/alib2std/src/extensions/deque.hpp
index 368f848a60..a705f21e41 100644
--- a/alib2std/src/extensions/deque.hpp
+++ b/alib2std/src/extensions/deque.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < class T, class Alloc = std::allocator < T > >
-class deque : public std::deque < T, Alloc > {
+class deque : public std::deque < T, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::deque < T, Alloc >::deque;
diff --git a/alib2std/src/extensions/forward_list.hpp b/alib2std/src/extensions/forward_list.hpp
index a50135ecc8..70c10f3f14 100644
--- a/alib2std/src/extensions/forward_list.hpp
+++ b/alib2std/src/extensions/forward_list.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < class T, class Alloc = std::allocator < T > >
-class forward_list : public std::forward_list < T, Alloc > {
+class forward_list : public std::forward_list < T, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::forward_list < T, Alloc >::forward_list;
diff --git a/alib2std/src/extensions/list.hpp b/alib2std/src/extensions/list.hpp
index fb8c0b0d2f..c97d514cec 100644
--- a/alib2std/src/extensions/list.hpp
+++ b/alib2std/src/extensions/list.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < class T, class Alloc = std::allocator < T > >
-class list : public std::list < T, Alloc > {
+class list : public std::list < T, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::list < T, Alloc >::list;
diff --git a/alib2std/src/extensions/map.hpp b/alib2std/src/extensions/map.hpp
index 79ac0846cd..173c3de12b 100644
--- a/alib2std/src/extensions/map.hpp
+++ b/alib2std/src/extensions/map.hpp
@@ -16,11 +16,12 @@
 
 #include "compare.hpp"
 #include "pair.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < typename T, typename R, typename Cmp = std::less < >, typename Alloc = std::allocator < std::pair < const T, R > > >
-class map : public std::map < T, R, Cmp, Alloc > {
+class map : public std::map < T, R, Cmp, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::map< T, R, Cmp, Alloc >::map;
diff --git a/alib2std/src/extensions/set.hpp b/alib2std/src/extensions/set.hpp
index 9adf02d345..7ed0e02ebb 100644
--- a/alib2std/src/extensions/set.hpp
+++ b/alib2std/src/extensions/set.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < typename T, typename Cmp = std::less < >, typename Alloc = std::allocator < T > >
-class set : public std::set < T, Cmp, Alloc > {
+class set : public std::set < T, Cmp, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::set < T, Cmp, Alloc >::set;
diff --git a/alib2std/src/extensions/unordered_map.hpp b/alib2std/src/extensions/unordered_map.hpp
index a5533798ab..6d55d72fef 100644
--- a/alib2std/src/extensions/unordered_map.hpp
+++ b/alib2std/src/extensions/unordered_map.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < class T, class R, class Hash = std::hash < T >, class KeyEqual = std::equal_to < T >, class Alloc = std::allocator < std::pair < const T, R > > >
-class unordered_map : public std::unordered_map < T, R, Hash, KeyEqual, Alloc > {
+class unordered_map : public std::unordered_map < T, R, Hash, KeyEqual, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::unordered_map < T, R, Hash, KeyEqual, Alloc >::unordered_map;
diff --git a/alib2std/src/extensions/vector.hpp b/alib2std/src/extensions/vector.hpp
index e152bc971b..7566ca0631 100644
--- a/alib2std/src/extensions/vector.hpp
+++ b/alib2std/src/extensions/vector.hpp
@@ -14,11 +14,12 @@
 #include <string>
 
 #include "compare.hpp"
+#include "allocFix.hpp"
 
 namespace ext {
 
 template < class T, class Alloc = std::allocator < T > >
-class vector : public std::vector < T, Alloc > {
+class vector : public std::vector < T, Alloc >, AllocFix < Alloc > {
 public:
 #ifdef __clang__
 	using std::vector< T, Alloc >::vector;
-- 
GitLab