1#ifndef _BBM_MAKE_FROM_H_
2#define _BBM_MAKE_FROM_H_
32 template<
typename T, literal... V>
requires std::constructible_from<T,
decltype(V.value)...> && (!(
is_array_v<
decltype(V.value)> && ...))
33 inline constexpr T
make_from() {
return T(V.value...); }
43 template<
typename T, literal A>
requires bbm::is_array_v<
decltype(A.value)>
46 auto helper = []<
size_t... IDX>(std::index_sequence<IDX...>) {
return T{A.value[IDX]...}; };
47 return helper(std::make_index_sequence<std::tuple_size_v<
decltype(A.value)>>{});
62 template<
typename T,
typename... Args>
65 if constexpr (std::constructible_from<T, Args...>)
67 if constexpr (
sizeof...(Args) == 0)
return T{};
68 else return T(std::forward<Args>(
args)...);
Predefined exceptions for common errors.
#define bbm_unevaluable
Definition: error.h:46
Work around for using floating point literals for compilers that do not support it (e....
Definition: aggregatebsdf.h:29
constexpr T make_from()
Make an object T from a series of non-array template literals.
Definition: make_from.h:33
constexpr bool is_array_v
Definition: type_traits.h:166
Forward declaration.
Definition: args.h:248