- iterator[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
namespace std {
template <class C>
constexpr auto empty(const C& c) -> decltype(c.empty()); // (1) C++17
template <class C>
[[nodiscard]] constexpr auto empty(const C& c) -> decltype(c.empty()); // (1) C++20
template <class T, std::size_t N>
constexpr bool empty(const T (&array)[N]) noexcept; // (2) C++17
template <class T, std::size_t N>
[[nodiscard]] constexpr bool empty(const T (&array)[N]) noexcept; // (2) C++20
template <class E>
constexpr bool empty(initializer_list<E> il) noexcept; // (3) C++17
template <class E>
[[nodiscard]] constexpr bool empty(initializer_list<E> il) noexcept; // (3) C++20
}
- initializer_list[link /reference/initializer_list/initializer_list.md]
コンテナが空かどうかを判定する。
- (1) :
return c.empty();
- (2) :
return false;
- (3) :
return il.size() == 0;
- 機能テストマクロは
__cpp_lib_nonmember_container_access
で値は201411
<iterator>
ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる:
#include <vector>
#include <iostream>
int main()
{
int arr[4] = {};
std::cout << std::boolalpha << std::empty(arr) << std::endl;
std::cout << std::boolalpha << std::empty(u8"arikitari") << std::endl;
std::vector<int> v;
std::cout << std::boolalpha << std::empty(v) << std::endl;
v.push_back(13);
std::cout << std::boolalpha << std::empty(v) << std::endl;
//変数vの型はstd名前空間にあるクラス型なので
//ADLによって `std::`がなくとも発見できる
std::cout << std::boolalpha << empty(v) << std::endl;
}
- std::empty[color ff0000]
- empty[color ff0000]
false
false
true
false
false
- C++17
- Clang: 3.6
- GCC: 6.1
- ICC: ??
- Visual C++: 2015