11 #ifndef DOCWIRE_NAMED_H
12 #define DOCWIRE_NAMED_H
13 #include <string_view>
16 #include <type_traits>
35 template <
size_t I,
typename T>
36 [[nodiscard]] constexpr decltype(
auto) get(
value<T>& v) noexcept
38 if constexpr (I == 0)
return (v.name);
39 else return (v.value);
42 template <
size_t I,
typename T>
43 [[nodiscard]] constexpr decltype(
auto) get(const value<T>& v) noexcept
45 if constexpr (I == 0) return (v.name);
46 else return (v.value);
49 template <
size_t I, typename T>
50 [[nodiscard]] constexpr decltype(auto) get(value<T>&& v) noexcept
52 if constexpr (I == 0) return std::move(v.name);
53 else return std::move(v.value);
61 const std::string_view name;
64 [[nodiscard]] constexpr
auto operator=(T&& val)
const noexcept(noexcept(
value<std::decay_t<T>>{name, std::forward<T>(val)}))
70 inline namespace literals
76 [[nodiscard]] constexpr
variable operator""_v(
const char* str,
size_t len) noexcept
78 return {std::string_view{str, len}};
86 using namespace docwire::named::literals;
95 struct tuple_size<
docwire::named::value<T>> : std::integral_constant<size_t, 2> {};
100 template <
size_t I,
typename T>
101 struct tuple_element<I,
docwire::named::value<T>>
103 static_assert(I < 2,
"index out of range for docwire::named::value");
104 using type = std::conditional_t<I == 0, std::string_view, T>;
Utilities for named parameters.
The main namespace for the DocWire SDK.
T value
The value of the parameter.
std::string_view name
The name of the parameter.
A helper to create named values using assignment syntax.