#pragma once #define _val(type) std::declval<type>() #define exists(expr) void_t<decltype(expr)> namespace iterator::detail { template <typename> using void_t = void; }