blob: 084381827901717378fa2aa4dd2bffa87c11d2a6 [file] [log] [blame]
Krzysztof Grobelnya8182be2022-07-04 11:26:20 +02001#pragma once
2
3#include <concepts>
4#include <variant>
5
6namespace utils
7{
8namespace details
9{
10
11template <class T, class... Args>
12auto removeMonostate(std::variant<T, Args...>) -> std::variant<T, Args...>;
13
14template <class... Args>
15auto removeMonostate(std::variant<std::monostate, Args...>)
16 -> std::variant<Args...>;
17
18template <class Variant>
19struct WithoutMonostate
20{
21 private:
22 public:
23 using type = decltype(removeMonostate(Variant{}));
24};
25
26} // namespace details
27
28template <class Variant>
29using WithoutMonostate = typename details::WithoutMonostate<Variant>::type;
30
31} // namespace utils