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