12#ifndef RANGES_V3_UTILITY_ADDRESSOF_HPP
13#define RANGES_V3_UTILITY_ADDRESSOF_HPP
22#include <range/v3/detail/config.hpp>
24#include <range/v3/detail/prologue.hpp>
31#ifdef __cpp_lib_addressof_constexpr
34 namespace check_addressof
36 inline ignore_t operator&(ignore_t)
48 constexpr bool has_bad_addressof()
50 return !std::is_scalar<T>::value &&
51 !RANGES_IS_SAME(
decltype(check_addressof::addressof(*(T *)
nullptr)),
56 requires(has_bad_addressof<T>()))
57 T * addressof(T & arg)
noexcept
59 return std::addressof(arg);
63 requires (!has_bad_addressof<T>()))
64 constexpr T * addressof(T & arg)
noexcept
70 T
const * addressof(T
const &&) =
delete;
76#include <range/v3/detail/epilogue.hpp>