#pragma once #include namespace ovdl::detail { #if !defined(_MSC_VER) #pragma GCC diagnostic push #pragma clang diagnostic ignored "-Wunknown-warning-option" #pragma GCC diagnostic ignored "-Wnon-template-friend" #endif template struct Reader { friend auto adl_GetSelfType(Reader); }; template struct Writer { friend auto adl_GetSelfType(Reader) { return U {}; } }; #if !defined(_MSC_VER) #pragma GCC diagnostic pop #endif inline void adl_GetSelfType() {} template using Read = std::remove_pointer_t {}))>; }