kblib 0.2.3
General utilities library for modern C++
variant.h File Reference

Provides utilities for working with std::variant more expressively and more efficiently. More...

#include "convert.h"
#include "logic.h"
#include "tdecl.h"
#include <cstddef>
#include <new>
#include <variant>
Include dependency graph for variant.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  kblib::is_variant_like< T >
 
struct  kblib::visitor< Ts >
 Helper class for std::visiting a std::variant. More...
 
struct  kblib::detail::tuple_type< T >
 Given a std::variant T, provides the member type which is a tuple of the same types. More...
 
struct  kblib::detail::tuple_type< std::variant< Ts... > >
 Given a std::variant T, provides the member type which is a tuple of the same types. More...
 

Namespaces

namespace  kblib
 The main namespace in which all entities from kblib are defined.
 
namespace  kblib::detail
 The namespace used for implementation details within kblib.
 
namespace  kblib::literals
 

Typedefs

template<typename T >
using kblib::detail::tuple_type_t = typename tuple_type< T >::type
 

Functions

template<typename To , typename... Ts>
auto kblib::coerce (const std::variant< Ts... > &v) -> To
 Lexically converts the value of v (no matter its type) to type To. More...
 
template<typename To , typename... Ts>
auto kblib::static_coerce (const std::variant< Ts... > &v) -> To
 static_casts the value of v (no matter its type) to type To. More...
 
template<typename To , typename... Ts>
auto kblib::lexical_coerce (const std::variant< Ts... > &v) -> To
 Lexically converts the value of v (no matter its type) to type To. More...
 
template<typename... Ts>
 kblib::visitor (Ts...) -> visitor< Ts... >
 
template<typename Variant , typename F , std::size_t... Is>
constexpr auto kblib::detail::indexed_visitor_impl (std::index_sequence< Is... >) -> auto
 Generates an array of function pointers which will unwrap the variant and pass the index to the function. More...
 
template<char... Cs>
constexpr auto kblib::literals::operator""_vi ()
 
template<typename Variant , typename... Fs>
constexpr auto kblib::visit_indexed (Variant &&variant, Fs &&... fs) -> decltype(auto)
 Visit a variant, but pass the index (as an integral_constant) to the visitor. This allows for a visitor of a variant with duplicated types to maintain index information. More...
 
template<typename To , typename From >
constexpr auto kblib::variant_cast (From &&v) -> To
 Promotes an input variant to a super-variant. That is, one which provides at least the same set of types. More...
 
template<typename V , typename F , typename... Fs>
constexpr auto kblib::visit (V &&v, F &&f, Fs &&... fs) -> decltype(auto)
 Wraps std::visit to provide an interface taking one variant and any number of functors providing an overload set. More...
 
template<typename V , typename F , std::size_t I, std::size_t... Is>
constexpr decltype(auto) kblib::detail::visit_impl (V &&v, F &&f, std::index_sequence< I, Is... >)
 
template<typename V , typename F , std::size_t I, std::size_t... Is>
constexpr void kblib::detail::visit_nop_impl (V &&v, F &&f, std::index_sequence< I, Is... >)
 
template<typename V , typename F , typename... Fs>
constexpr auto kblib::visit2 (V &&v, F &&f, Fs &&... fs) -> decltype(auto)
 
template<typename V , typename F , typename... Fs>
constexpr auto kblib::visit2_nop (V &&v, F &&f, Fs &&... fs) -> void
 
template<typename V >
constexpr auto kblib::visit (V &v) -> auto
 Two-step visiting interface. Takes a variant, and returns an object which can be called with any number of callable arguments, builds an overload set from them, and visits the variant. More...
 

Variables

template<typename T , typename = void>
constexpr bool kblib::is_variant_like_v = false
 
template<typename F , typename... Ts>
constexpr bool kblib::detail::invocable_with_all_v = (ignore_t<std::invoke_result_t<F, Ts>, std::true_type>::value and ...)
 
template<typename Callable , typename Variant >
constexpr bool kblib::detail::v_invocable_with_all_v = false
 

Detailed Description

Provides utilities for working with std::variant more expressively and more efficiently.

Author
killerbee
Date
2019-2021

Definition in file variant.h.