From 4595bbe942bd9bcca44bde9e1ebda1318c43ca35 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 21 Mar 2019 16:35:21 +0100
Subject: [PATCH] restrict variant compare operators

---
 alib2std/src/extensions/container/variant.hpp | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/alib2std/src/extensions/container/variant.hpp b/alib2std/src/extensions/container/variant.hpp
index 197a400504..5e014a9e04 100644
--- a/alib2std/src/extensions/container/variant.hpp
+++ b/alib2std/src/extensions/container/variant.hpp
@@ -1321,62 +1321,62 @@ std::string to_string ( const ext::variant < Ts ... > & value ) {
 	return ( std::string ) value;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator < ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) < 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator > ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) > 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator <= ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) <= 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator >= ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) >= 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator == ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) == 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator != ( const ext::variant < Ts ... > & first, const T & second ) {
 	return first.compare ( second ) != 0;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator < ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second > first;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator > ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second < first;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator <= ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second >= first;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator >= ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second <= first;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator == ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second == first;
 }
 
-template < class ... Ts, class T >
+template < class ... Ts, class T, typename std::enable_if < ext::is_in < T, Ts ... >::value >::type * = nullptr >
 bool operator != ( const T & first, const ext::variant < Ts ... > & second ) {
 	return second != first;
 }
@@ -1386,7 +1386,7 @@ bool operator != ( const T & first, const ext::variant < Ts ... > & second ) {
  * Class to help building of the variant type or, in case variant is requested to be constructed from single type or more types but all the same, that concrete type.
  *
  * \tparam Res the resulting contstructed variant
- * \tparam Ts ... pack of types to construct the variant from 
+ * \tparam Ts ... pack of types to construct the variant from
  */
 template < class Res, class ... Ts >
 struct variant_builder_impl {
-- 
GitLab