// // Copyright (c) MapBox All rights reserved. // SPDX-License-Identifier: BSD-3-Clause // #ifndef MAPBOX_UTIL_VARIANT_VISITOR_HPP #define MAPBOX_UTIL_VARIANT_VISITOR_HPP #include namespace mapbox { namespace util { template struct visitor; template struct visitor : Fn { using Fn::operator(); template visitor(T&& fn) : Fn(std::forward(fn)) {} }; template struct visitor : Fn, visitor { using Fn::operator(); using visitor::operator(); template visitor(T&& fn, Ts&&... fns) : Fn(std::forward(fn)) , visitor(std::forward(fns)...) {} }; template visitor::type...> make_visitor(Fns&&... fns) { return visitor::type...> (std::forward(fns)...); } } // namespace util } // namespace mapbox #endif // MAPBOX_UTIL_VARIANT_VISITOR_HPP