Iros
 
Loading...
Searching...
No Matches
deduce_create.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/types/prelude.h"
5#include "di/util/declval.h"
6
7namespace di::util {
8namespace detail {
9 template<template<typename...> typename Template, typename... Args>
10 concept CTADDeducible = requires(Args&&... args) { Template(util::forward<Args>(args)...); };
11
13 template<template<typename...> typename Template, typename... Args>
14 requires(CTADDeducible<Template, Args...>)
15 constexpr auto operator()(InPlaceTemplate<Template>, Args&&... args) const
16 -> decltype(Template(util::forward<Args>(args)...));
17
18 template<template<typename...> typename Template, typename... Args>
19 requires(!CTADDeducible<Template, Args...>)
20 constexpr auto operator()(InPlaceTemplate<Template>, Args&&...) const
22 };
23}
24
26}
27
28namespace di::concepts {
29template<template<typename...> typename Template, typename... Args>
31}
32
33namespace di::meta {
34template<template<typename...> typename Template, typename... Args>
35requires(concepts::CreateDeducible<Template, Args...>)
37}
Definition deduce_create.h:30
Definition deduce_create.h:10
Definition any_storable.h:9
Definition merge_interfaces.h:6
decltype(util::deduce_create(in_place_template< Template >, util::declval< Args >()...)) DeduceCreate
Definition deduce_create.h:36
decltype(di::function::tag_invoke(util::declval< Tag >(), util::declval< Args >()...)) TagInvokeResult
Definition tag_invoke.h:40
Definition clamp.h:9
Definition vocab.h:96
constexpr auto deduce_create
Definition deduce_create.h:25
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
constexpr auto in_place_template
Definition in_place_template.h:8
Definition in_place_template.h:5
Definition deduce_create.h:12