namespace std {
template <class InputIterator,
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
list(InputIterator, InputIterator, Allocator = Allocator())
-> list<typename iterator_traits<InputIterator>::value_type, Allocator>;
}
概要
std::list
クラステンプレートの型推論補助。イテレータ範囲から推論する。
例
#include <list>
#include <type_traits>
#include <cassert>
int main()
{
// 初期化子リストから推論
std::list ls1 = {1, 2, 3};
static_assert(std::is_same_v<decltype(ls1), std::list<int>>);
// パラメータ設定済みのlistからの推論
std::list ls2 = ls1;
static_assert(std::is_same_v<decltype(ls2), std::list<int>>);
// 値1を3回繰り返すコンストラクタからの推論。
// ls3{3, 1} とすると初期化子リストと見なされてしまうので注意
std::list ls3(3, 1);
static_assert(std::is_same_v<decltype(ls3), std::list<int>>);
assert(ls3.size() == 3);
// イテレータ範囲からの推論。
// ls4{ls1.begin(), ls1.end()} とすると、イテレータの初期化子リストと見なされてしまうので注意
std::list ls4(ls1.begin(), ls1.end());
static_assert(std::is_same_v<decltype(ls4), std::list<int>>);
assert(ls4.size() == 3);
}
出力
バージョン
言語
- C++17
処理系
- Clang:
- GCC: 8.1 ✅
- Visual C++: ??