// Copyright Takatoshi Kondo 2018 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #if !defined(MQTT_VARIANT_HPP) #define MQTT_VARIANT_HPP #include #include #if defined(MQTT_STD_VARIANT) #include namespace MQTT_NS { using std::variant; template decltype(auto) variant_get(U && arg) { return std::get(std::forward(arg)); } template decltype(auto) variant_idx(T const& arg) { return arg.index(); } using std::visit; } // namespace MQTT_NS #else // defined(MQTT_STD_VARIANT) #include #include #include namespace MQTT_NS { using boost::variant; template decltype(auto) variant_get(U && arg) { return boost::get(std::forward(arg)); } template decltype(auto) variant_idx(T const& arg) { return arg.which(); } template constexpr decltype(auto) visit(Visitor&& vis, Variants&&... vars) { return boost::apply_visitor(std::forward(vis), std::forward(vars)...); } } // namespace MQTT_NS #endif // defined(MQTT_STD_VARIANT) #endif // MQTT_VARIANT_HPP