CVB++ 15.0
detail_callable.hpp
1#pragma once
2
3#include <utility>
4
5#include "../global.hpp"
6namespace Cvb
7{
8 CVB_BEGIN_INLINE_NS
9
11 namespace Internal
12 {
13 template <typename>
14 struct true_given : std::true_type
15 {
16 };
17
18 namespace // NOLINT(cert-dcl59-cpp)
19 {
20 struct is_callable_tester
21 {
22 template <typename Fun, typename... Args>
23 true_given<decltype(std::declval<Fun>()(std::declval<Args>()...))> static test(int);
24 template <typename...>
25 std::false_type static test(...);
26 };
27 } // namespace
28
29 template <typename T>
30 struct is_callable;
31
32 template <typename Fun, typename... Args>
33 struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args...>(0))
34 {
35 };
36
37 template <typename Lambda, std::size_t M, typename Testarg, typename... Testargs>
38 struct IsCallableMParameters : IsCallableMParameters<Lambda, M - 1, Testarg, Testarg, Testargs...>
39 {
40 };
41
42 template <typename Lambda, typename Testarg, typename... Testargs>
43 struct IsCallableMParameters<Lambda, 0, Testarg, Testargs...> : is_callable<Lambda(Testargs...)>
44 {
45 };
46 } // namespace Internal
48 CVB_END_INLINE_NS
49} // namespace Cvb
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17