traits: add trivial type_traits tests
This commit is contained in:
parent
d79b7da067
commit
8e7f23c4dd
@ -507,6 +507,7 @@ if (TESTS)
|
|||||||
stringid
|
stringid
|
||||||
strongdef
|
strongdef
|
||||||
tuple
|
tuple
|
||||||
|
traits
|
||||||
typeidx
|
typeidx
|
||||||
uri
|
uri
|
||||||
vector
|
vector
|
||||||
|
58
test/traits.cpp
Normal file
58
test/traits.cpp
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#include <cruft/util/tap.hpp>
|
||||||
|
#include <cruft/util/types/traits.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename FuncT>
|
||||||
|
constexpr bool
|
||||||
|
returns_int (FuncT)
|
||||||
|
{
|
||||||
|
return std::is_same_v<
|
||||||
|
int,
|
||||||
|
typename func_traits<FuncT>::return_type
|
||||||
|
>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename, class = std::void_t<>>
|
||||||
|
struct has_return_type : std::false_type {};
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
template <typename T>
|
||||||
|
struct has_return_type<
|
||||||
|
T, std::void_t<typename func_traits<T>::return_type>
|
||||||
|
> : std::true_type {};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
int plain (char, float);
|
||||||
|
int with_noexcept (char, float) noexcept;
|
||||||
|
struct foo {
|
||||||
|
int bar (double, char) const;
|
||||||
|
int with_noexcept (double, char) noexcept;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
int
|
||||||
|
main (void)
|
||||||
|
{
|
||||||
|
util::TAP::logger tap;
|
||||||
|
|
||||||
|
tap.expect (returns_int ( plain), "free-function by-reference");
|
||||||
|
tap.expect (returns_int (&plain), "free-function by-pointer");
|
||||||
|
|
||||||
|
tap.expect (returns_int ( with_noexcept), "free-function with noexcept by-reference");
|
||||||
|
tap.expect (returns_int (&with_noexcept), "free-function with noexcept by-pointer");
|
||||||
|
|
||||||
|
tap.expect (returns_int (&foo::bar), "member-function by reference");
|
||||||
|
tap.expect (returns_int (&foo::with_noexcept), "member-function with noexcept by reference");
|
||||||
|
|
||||||
|
using all_t = void (*const &)(void *, unsigned int, unsigned int, void **) noexcept;
|
||||||
|
tap.expect (std::is_same_v<void, typename func_traits<all_t>::return_type>,
|
||||||
|
"complex function type");
|
||||||
|
|
||||||
|
tap.expect (!has_return_type<int>::value, "integer is not applicable to func_traits");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user