Update Variant Visitors

Update to using newer templates that support
vector.

Change-Id: I83ed73b606f33f5bfca304c80990bd92f06abe64
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/include/VariantVisitors.hpp b/include/VariantVisitors.hpp
index 8d4b004..7a8677f 100644
--- a/include/VariantVisitors.hpp
+++ b/include/VariantVisitors.hpp
@@ -15,61 +15,70 @@
 */
 
 #pragma once
-#include <boost/variant.hpp>
+#include <stdexcept>
 #include <string>
 
-struct VariantToFloatVisitor : public boost::static_visitor<float>
+struct VariantToFloatVisitor
 {
+
     template <typename T> float operator()(const T &t) const
     {
-        return static_cast<float>(t);
+        if constexpr (std::is_arithmetic_v<T>)
+        {
+            return static_cast<float>(t);
+        }
+        throw std::invalid_argument("Cannot translate type to float");
     }
 };
-template <>
-inline float VariantToFloatVisitor::
-    operator()<std::string>(const std::string &s) const
-{
-    throw std::invalid_argument("Cannot translate string to float");
-}
 
-struct VariantToIntVisitor : public boost::static_visitor<int>
+struct VariantToIntVisitor
 {
     template <typename T> int operator()(const T &t) const
     {
-        return static_cast<int>(t);
+        if constexpr (std::is_arithmetic_v<T>)
+        {
+            return static_cast<int>(t);
+        }
+        throw std::invalid_argument("Cannot translate type to int");
     }
 };
-template <>
-inline int VariantToIntVisitor::
-    operator()<std::string>(const std::string &s) const
-{
-    throw std::invalid_argument("Cannot translate string to int");
-}
 
-struct VariantToUnsignedIntVisitor : public boost::static_visitor<unsigned int>
+struct VariantToUnsignedIntVisitor
 {
     template <typename T> unsigned int operator()(const T &t) const
     {
-        return static_cast<int>(t);
+        if constexpr (std::is_arithmetic_v<T>)
+        {
+            return static_cast<unsigned int>(t);
+        }
+        throw std::invalid_argument("Cannot translate type to unsigned int");
     }
 };
-template <>
-inline unsigned int VariantToUnsignedIntVisitor::
-    operator()<std::string>(const std::string &s) const
-{
-    throw std::invalid_argument("Cannot translate string to unsigned int");
-}
 
-struct VariantToStringVisitor : public boost::static_visitor<std::string>
+struct VariantToStringVisitor
 {
     template <typename T> std::string operator()(const T &t) const
     {
-        return std::to_string(t);
+        if constexpr (std::is_same_v<T, std::string>)
+        {
+            return t;
+        }
+        else if constexpr (std::is_arithmetic_v<T>)
+        {
+            return std::to_string(t);
+        }
+        throw std::invalid_argument("Cannot translate type to string");
     }
 };
-template <>
-inline std::string VariantToStringVisitor::
-    operator()<std::string>(const std::string &s) const
+
+struct VariantToDoubleVisitor
 {
-    return s;
-}
\ No newline at end of file
+    template <typename T> double operator()(const T &t) const
+    {
+        if constexpr (std::is_arithmetic_v<T>)
+        {
+            return static_cast<double>(t);
+        }
+        throw std::invalid_argument("Cannot translate type to double");
+    }
+};