/* * This file is part of the DXX-Rebirth project . * It is copyright by its individual contributors, as recorded in the * project's Git history. See COPYING.txt at the top level for license * terms and a link to the Git history. */ #pragma once #include #include namespace detail { template std::is_rvalue_reference is_ephemeral_range(...); template typename std::remove_reference::type::range_owns_iterated_storage is_ephemeral_range(std::nullptr_t); } template struct any_ephemeral_range : std::false_type { }; template struct any_ephemeral_range : decltype(detail::is_ephemeral_range(nullptr)) { }; template struct any_ephemeral_range : std::conditional::value, std::true_type, any_ephemeral_range>::type { };