123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // 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 <mqtt/config.hpp>
- #include <mqtt/namespace.hpp>
- #if defined(MQTT_STD_VARIANT)
- #include <variant>
- namespace MQTT_NS {
- using std::variant;
- template<typename T, typename U>
- decltype(auto) variant_get(U && arg)
- {
- return std::get<T>(std::forward<U>(arg));
- }
- template<typename T>
- decltype(auto) variant_idx(T const& arg)
- {
- return arg.index();
- }
- using std::visit;
- } // namespace MQTT_NS
- #else // defined(MQTT_STD_VARIANT)
- #include <boost/variant.hpp>
- #include <boost/variant/get.hpp>
- #include <boost/variant/apply_visitor.hpp>
- namespace MQTT_NS {
- using boost::variant;
- template<typename T, typename U>
- decltype(auto) variant_get(U && arg)
- {
- return boost::get<T>(std::forward<U>(arg));
- }
- template<typename T>
- decltype(auto) variant_idx(T const& arg)
- {
- return arg.which();
- }
- template <typename Visitor, typename... Variants>
- constexpr decltype(auto) visit(Visitor&& vis, Variants&&... vars)
- {
- return boost::apply_visitor(std::forward<Visitor>(vis), std::forward<Variants>(vars)...);
- }
- } // namespace MQTT_NS
- #endif // defined(MQTT_STD_VARIANT)
- #endif // MQTT_VARIANT_HPP
|