1// -*- C++ -*- 2//===----------------------------------------------------------------------===// 3// 4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5// See https://llvm.org/LICENSE.txt for license information. 6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef _LIBCPP___ITERATOR_EMPTY_H 11#define _LIBCPP___ITERATOR_EMPTY_H 12 13#include <__config> 14#include <cstddef> 15#include <initializer_list> 16 17#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 18# pragma GCC system_header 19#endif 20 21_LIBCPP_BEGIN_NAMESPACE_STD 22 23#if _LIBCPP_STD_VER >= 17 24 25template <class _Cont> 26_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI constexpr auto empty(const _Cont& __c) 27 _NOEXCEPT_(noexcept(__c.empty())) -> decltype(__c.empty()) { 28 return __c.empty(); 29} 30 31template <class _Tp, size_t _Sz> 32_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI constexpr bool empty(const _Tp (&)[_Sz]) noexcept { 33 return false; 34} 35 36template <class _Ep> 37_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI constexpr bool empty(initializer_list<_Ep> __il) noexcept { 38 return __il.size() == 0; 39} 40 41#endif // _LIBCPP_STD_VER >= 17 42 43_LIBCPP_END_NAMESPACE_STD 44 45#endif // _LIBCPP___ITERATOR_EMPTY_H 46