AUI Framework  master
Cross-platform module-based framework for developing C++20 desktop applications
callables.h
1/*
2 * AUI Framework - Declarative UI toolkit for modern C++20
3 * Copyright (C) 2020-2024 Alex2772 and Contributors
4 *
5 * SPDX-License-Identifier: MPL-2.0
6 *
7 * This Source Code Form is subject to the terms of the Mozilla Public
8 * License, v. 2.0. If a copy of the MPL was not distributed with this
9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 */
11
12//
13// Created by Alex2772 on 11/19/2021.
14//
15
16#pragma once
17
18#include "members.h"
19
20namespace aui {
21
22 template<typename F>
23 concept not_overloaded_lambda = requires(F&& f) {
24 { &F::operator() };
25 };
26
27 static_assert(not_overloaded_lambda<decltype([]{})>, "aui::not_overloaded_lambda failed");
28 static_assert(not_overloaded_lambda<decltype([](int v){})>, "aui::not_overloaded_lambda failed");
29
33 template<typename... Lambdas>
34 struct lambda_overloaded : Lambdas... {
35 using Lambdas::operator()...;
36 };
37
38 // deduction guide
39 template<typename... Lambdas>
40 lambda_overloaded(Lambdas...) -> lambda_overloaded<Lambdas...>;
41
42 template<typename Return, typename... Args>
44
45 template<typename Return, typename... Args>
46 struct function_info<Return(Args...)> {
47 using return_t = Return;
48 using args = std::tuple<Args...>;
49 };
50
51 template<not_overloaded_lambda Lambda>
52 using lambda_info = member<decltype(&Lambda::operator())>;
53
59 struct identity
60 {
61 template<typename T>
62 [[nodiscard]]
63 constexpr T&& operator()(T&& t) const noexcept { return std::forward<T>(t); }
64 };
65}
Definition: callables.h:43
Function object type whose operator() returns its argument unchanged.
Definition: callables.h:60
Definition: callables.h:34
Definition: members.h:19