- stack[meta header]
- std[meta namespace]
- stack[meta class]
- cpp17[meta cpp]
namespace std {
// 説明用の型
template <class InputIterator>
using iter_val_t = typename iterator_traits<InputIterator>::value_type;
template <class Container>
stack(Container)
-> stack<typename Container::value_type, Container>; // (1)
template <class InputIterator>
stack(InputIterator, InputIterator)
-> stack<iter_val_t<InputIterator>>; // (2) C++23から
template <ranges::input_range R>
stack(from_range_t, R&&)-> stack<ranges::range_value_t<R>>; // (3) C++23から
template <class Container, class Allocator>
stack(Container, Allocator)
-> stack<typename Container::value_type, Container>; // (4)
template <class InputIterator, class Allocator>
stack(InputIterator, InputIterator, Allocator)
-> stack<iter_val_t<InputIterator>, deque<iter_val_t<InputIterator>,
Allocator>>; // (5) C++23から
template <ranges::input_range R, class Allocator>
stack(from_range_t, R&&, Allocator)
-> stack<ranges::range_value_t<R>, deque<ranges::range_value_t<R>,
Allocator>>; // (6) C++23から
}- deque[link /reference/deque/deque.md]
- ranges::input_range[link /reference/ranges/input_range.md]
- ranges::range_value_t[link /reference/ranges/range_value_t.md]
- from_range_t[link /reference/ranges/from_range_t.md]
std::stackクラステンプレートの型推論補助。
- (1) : 元となるコンテナから推論する。
- (2) : イテレータ範囲から推論する。
- (3) : Rangeからの推論する。
- (4) : 元となるコンテナとアロケータから推論する。
- (5) : イテレータ範囲とアロケータから推論する。
- (6) : Rangeとアロケータからの推論する。
以下のいずれかの条件を満たす場合、コンテナアダプタの推論補助はオーバーロード解決に参加しない:
InputIteratorテンプレートパラメータをもち、入力イテレータの要件を満たさない型が推論された場合Containerテンプレートパラメータをもち、アロケータとして適格な型が推論された場合 (C++23)Containerテンプレートパラメータをもたず、Allocatorテンプレートパラメータをもち、アロケータとして適格でない型が推論された場合 (C++23)ContainerとAllocatorの両方のテンプレートパラメータをもち、uses_allocator_v<Container, Allocator>がfalseの場合
#include <iostream>
#include <stack>
#include <type_traits>
#include <deque>
int main()
{
std::deque d = {1, 2, 3};
// 元となるコンテナから推論
std::stack st {d};
static_assert(std::is_same_v<
decltype(st),
std::stack<int>
>);
while (!st.empty()) {
std::cout << st.top() << std::endl;
st.pop();
}
}- st.empty()[link empty.md]
- st.top()[link top.md]
- st.pop()[link pop.md]
3
2
1
- C++17
- Clang:
- GCC:
- Visual C++: ??