traits: add trivial type_traits tests

This commit is contained in:
Danny Robson 2017-09-08 14:20:01 +10:00
parent d79b7da067
commit 8e7f23c4dd
2 changed files with 59 additions and 0 deletions

View File

@ -507,6 +507,7 @@ if (TESTS)
stringid
strongdef
tuple
traits
typeidx
uri
vector

58
test/traits.cpp Normal file
View 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");
}