Fix sir::is_custom
This commit is contained in:
parent
67c7ce0878
commit
1036ebae30
1 changed files with 31 additions and 31 deletions
|
|
@ -5,41 +5,41 @@
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
namespace psemek_sir_adl_helper
|
||||||
|
{
|
||||||
|
|
||||||
|
struct fake_istream
|
||||||
|
{
|
||||||
|
void read(char *, std::size_t){}
|
||||||
|
|
||||||
|
std::size_t offset() const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fake_ostream
|
||||||
|
{
|
||||||
|
void write(char const *, std::size_t){}
|
||||||
|
|
||||||
|
std::size_t offset() const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(::psemek::sir::is_istream_v<fake_istream>);
|
||||||
|
static_assert(::psemek::sir::is_ostream_v<fake_ostream>);
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
constexpr bool is_custom_helper = requires (T & x, fake_istream & is, fake_ostream & os)
|
||||||
|
{
|
||||||
|
write(os, x);
|
||||||
|
read(is, x);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
namespace psemek::sir
|
namespace psemek::sir
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
struct fake_istream
|
|
||||||
{
|
|
||||||
void read(char *, std::size_t){}
|
|
||||||
|
|
||||||
std::size_t offset() const { return 0; }
|
|
||||||
};
|
|
||||||
|
|
||||||
struct fake_ostream
|
|
||||||
{
|
|
||||||
void write(char const *, std::size_t){}
|
|
||||||
|
|
||||||
std::size_t offset() const { return 0; }
|
|
||||||
};
|
|
||||||
|
|
||||||
static_assert(is_istream_v<fake_istream>);
|
|
||||||
static_assert(is_ostream_v<fake_ostream>);
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
constexpr bool is_custom_helper = requires (T & x, fake_istream & is, fake_ostream & os)
|
|
||||||
{
|
|
||||||
write(os, x);
|
|
||||||
read(is, x);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct is_custom
|
struct is_custom
|
||||||
: std::bool_constant<detail::is_custom_helper<T>>
|
: std::bool_constant<::psemek_sir_adl_helper::is_custom_helper<T>>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
@ -55,7 +55,7 @@ namespace psemek::sir
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct is_trivial
|
struct is_trivial
|
||||||
: std::bool_constant<std::is_trivial_v<T> && std::is_standard_layout_v<T>>
|
: std::bool_constant<std::is_trivially_default_constructible_v<T> && std::is_trivially_copyable_v<T> && std::is_standard_layout_v<T>>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue