From e267512ad40c073bd5a5b37a4ee3378c80b9f523 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?louiz=E2=80=99?= <louiz@louiz.org>
Date: Thu, 25 Jan 2018 02:17:20 +0100
Subject: Restore the is_one_of variable template

---
 src/database/row.hpp    |  4 ++--
 src/utils/is_one_of.hpp |  9 ++++++---
 tests/utils.cpp         | 14 +++++++-------
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/database/row.hpp b/src/database/row.hpp
index 2d55897..130863a 100644
--- a/src/database/row.hpp
+++ b/src/database/row.hpp
@@ -30,13 +30,13 @@ struct Row
   }
 
   template <bool Coucou=true>
-  void save(std::unique_ptr<DatabaseEngine>& db,  typename std::enable_if<!is_one_of<Id, T...>::value && Coucou>::type* = nullptr)
+  void save(std::unique_ptr<DatabaseEngine>& db, typename std::enable_if<!is_one_of<Id, T...> && Coucou>::type* = nullptr)
   {
     this->insert(*db);
   }
 
   template <bool Coucou=true>
-  void save(std::unique_ptr<DatabaseEngine>& db,  typename std::enable_if<is_one_of<Id, T...>::value && Coucou>::type* = nullptr)
+  void save(std::unique_ptr<DatabaseEngine>& db, typename std::enable_if<is_one_of<Id, T...> && Coucou>::type* = nullptr)
   {
     const Id& id = std::get<Id>(this->columns);
     if (id.value == Id::unset_value)
diff --git a/src/utils/is_one_of.hpp b/src/utils/is_one_of.hpp
index c706421..4d6770e 100644
--- a/src/utils/is_one_of.hpp
+++ b/src/utils/is_one_of.hpp
@@ -3,12 +3,15 @@
 #include <type_traits>
 
 template <typename...>
-struct is_one_of {
+struct is_one_of_implem {
     static constexpr bool value = false;
 };
 
 template <typename F, typename S, typename... T>
-struct is_one_of<F, S, T...> {
+struct is_one_of_implem<F, S, T...> {
     static constexpr bool value =
-        std::is_same<F, S>::value || is_one_of<F, T...>::value;
+        std::is_same<F, S>::value || is_one_of_implem<F, T...>::value;
 };
+
+template<typename... T>
+constexpr bool is_one_of = is_one_of_implem<T...>::value;
diff --git a/tests/utils.cpp b/tests/utils.cpp
index 99c7040..6de19f0 100644
--- a/tests/utils.cpp
+++ b/tests/utils.cpp
@@ -175,11 +175,11 @@ TEST_CASE("dirname")
 
 TEST_CASE("is_in")
 {
-  CHECK((is_one_of<int, float, std::string, int>::value) == true);
-  CHECK((is_one_of<int, float, std::string>::value) == false);
-  CHECK((is_one_of<int>::value) == false);
-  CHECK((is_one_of<int, int>::value) == true);
-  CHECK((is_one_of<bool, int>::value) == false);
-  CHECK((is_one_of<bool, bool>::value) == true);
-  CHECK((is_one_of<bool, bool, bool, bool, bool, int>::value) == true);
+  CHECK((is_one_of<int, float, std::string, int>) == true);
+  CHECK((is_one_of<int, float, std::string>) == false);
+  CHECK((is_one_of<int>) == false);
+  CHECK((is_one_of<int, int>) == true);
+  CHECK((is_one_of<bool, int>) == false);
+  CHECK((is_one_of<bool, bool>) == true);
+  CHECK((is_one_of<bool, bool, bool, bool, bool, int>) == true);
 }
-- 
cgit v1.2.3