31 #include <type_traits> 46 qDebug () << Q_FUNC_INFO;
50 void TypeGetterTest::testArgType ()
52 const auto f = [] (int,
const double) {};
53 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 0>,
int>);
54 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 1>,
double>);
57 void TypeGetterTest::testArgTypeRef ()
59 const auto f = [] (
int&,
const double&) {};
60 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 0>,
int&>);
61 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 1>,
const double&>);
64 void TypeGetterTest::testArgTypeRvalueRef ()
66 const auto f = [] (
int&&,
const double&&) {};
67 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 0>,
int&&>);
68 static_assert (std::is_same_v<
ArgType_t<decltype (
f), 1>,
const double&&>);
71 void TypeGetterTest::testRetType ()
73 const auto f = [] (
int val,
const double) {
return val; };
74 static_assert (std::is_same_v<
RetType_t<decltype (
f)>,
int>);
77 void TypeGetterTest::testRetTypeVoid ()
80 static_assert (std::is_same_v<
RetType_t<decltype (
f)>,
void>);
83 void TypeGetterTest::testRetTypeRef ()
86 const auto f = [&x] (int,
const double) ->
int& {
return x; };
87 static_assert (std::is_same_v<
RetType_t<decltype (
f)>,
int&>);
90 void TypeGetterTest::testRetTypeConstRef ()
93 const auto f = [&x] (int,
const double) ->
const int& {
return x; };
94 static_assert (std::is_same_v<
RetType_t<decltype (
f)>,
const int&>);
constexpr detail::ExprTree< detail::ExprType::LeafStaticPlaceholder, detail::MemberPtrs< Ptr > > f
std::conditional_t< std::is_same_v< detail::RetTypeRaw_t< F >, detail::ReturnsVoid >, void, detail::RetTypeRaw_t< F > > RetType_t
std::tuple_element_t< Idx+1, decltype(detail::TypeGetter(*static_cast< F * >(nullptr)))> ArgType_t