Skip to content

Commit 3fca4f4

Browse files
jwakelytkoeppe
authored andcommitted
[associative], [unord] Use \placeholder for deduction guide alias templates.
Also rename iter_val_t to iter-mapped-type and then add iter-value-type for value_type. Fixes #1523
1 parent 174bec6 commit 3fca4f4

File tree

1 file changed

+76
-72
lines changed

1 file changed

+76
-72
lines changed

source/containers.tex

Lines changed: 76 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -5805,18 +5805,20 @@
58055805

58065806
\pnum
58075807
The following exposition-only alias templates may appear in deduction guides for associative containers:
5808-
58095808
\begin{codeblock}
58105809
template<class InputIterator>
5811-
using iter_key_t = remove_const_t<
5812-
typename iterator_traits<InputIterator>::value_type::first_type>; // \expos
5810+
using @\placeholder{iter-value-type}@ =
5811+
typename iterator_traits<InputIterator>::value_type; // \expos
5812+
template<class InputIterator>
5813+
using @\placeholder{iter-key-type}@ = remove_const_t<
5814+
typename iterator_traits<InputIterator>::value_type::first_type>; // \expos
58135815
template<class InputIterator>
5814-
using iter_val_t
5815-
= typename iterator_traits<InputIterator>::value_type::second_type; // \expos
5816+
using @\placeholder{iter-mapped-type}@ =
5817+
typename iterator_traits<InputIterator>::value_type::second_type; // \expos
58165818
template<class InputIterator>
5817-
using iter_to_alloc_t
5818-
= pair<add_const_t<typename iterator_traits<InputIterator>::value_type::first_type>,
5819-
typename iterator_traits<InputIterator>::value_type::second_type>; // \expos
5819+
using @\placeholder{iter-to-alloc-type}@ = pair<
5820+
add_const_t<typename iterator_traits<InputIterator>::value_type::first_type>,
5821+
typename iterator_traits<InputIterator>::value_type::second_type>; // \expos
58205822
\end{codeblock}
58215823

58225824
\rSec2[associative.map.syn]{Header \tcode{<map>} synopsis}
@@ -6188,10 +6190,10 @@
61886190
pair<const_iterator, const_iterator> equal_range(const K& x) const;
61896191
};
61906192

6191-
template<class InputIterator, class Compare = less<iter_key_t<InputIterator>>,
6192-
class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
6193+
template<class InputIterator, class Compare = less<@\placeholder{iter-key-type}@<InputIterator>>,
6194+
class Allocator = allocator<@\placeholder{iter-to-alloc-type}@<InputIterator>>>
61936195
map(InputIterator, InputIterator, Compare = Compare(), Allocator = Allocator())
6194-
-> map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Compare, Allocator>;
6196+
-> map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>, Compare, Allocator>;
61956197

61966198
template<class Key, class T, class Compare = less<Key>,
61976199
class Allocator = allocator<pair<const Key, T>>>
@@ -6200,8 +6202,8 @@
62006202

62016203
template<class InputIterator, class Allocator>
62026204
map(InputIterator, InputIterator, Allocator)
6203-
-> map<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
6204-
less<iter_key_t<InputIterator>>, Allocator>;
6205+
-> map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
6206+
less<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
62056207

62066208
template<class Key, class T, class Allocator>
62076209
map(initializer_list<pair<const Key, T>>, Allocator) -> map<Key, T, less<Key>, Allocator>;
@@ -6696,10 +6698,11 @@
66966698
pair<const_iterator, const_iterator> equal_range(const K& x) const;
66976699
};
66986700

6699-
template<class InputIterator, class Compare = less<iter_key_t<InputIterator>>,
6700-
class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
6701+
template<class InputIterator, class Compare = less<@\placeholder{iter-key-type}@<InputIterator>>,
6702+
class Allocator = allocator<@\placeholder{iter-to-alloc-type}@<InputIterator>>>
67016703
multimap(InputIterator, InputIterator, Compare = Compare(), Allocator = Allocator())
6702-
-> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Compare, Allocator>;
6704+
-> multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
6705+
Compare, Allocator>;
67036706

67046707
template<class Key, class T, class Compare = less<Key>,
67056708
class Allocator = allocator<pair<const Key, T>>>
@@ -6708,8 +6711,8 @@
67086711

67096712
template<class InputIterator, class Allocator>
67106713
multimap(InputIterator, InputIterator, Allocator)
6711-
-> multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
6712-
less<iter_key_t<InputIterator>>, Allocator>;
6714+
-> multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
6715+
less<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
67136716

67146717
template<class Key, class T, class Allocator>
67156718
multimap(initializer_list<pair<const Key, T>>, Allocator)
@@ -6991,20 +6994,20 @@
69916994
};
69926995

69936996
template<class InputIterator,
6994-
class Compare = less<typename iterator_traits<InputIterator>::value_type>,
6995-
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
6997+
class Compare = less<@\placeholder{iter-value-type}@<InputIterator>>,
6998+
class Allocator = allocator<@\placeholder{iter-value-type}@<InputIterator>>>
69966999
set(InputIterator, InputIterator,
69977000
Compare = Compare(), Allocator = Allocator())
6998-
-> set<typename iterator_traits<InputIterator>::value_type, Compare, Allocator>;
7001+
-> set<@\placeholder{iter-value-type}@<InputIterator>, Compare, Allocator>;
69997002

70007003
template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
70017004
set(initializer_list<Key>, Compare = Compare(), Allocator = Allocator())
70027005
-> set<Key, Compare, Allocator>;
70037006

70047007
template<class InputIterator, class Allocator>
70057008
set(InputIterator, InputIterator, Allocator)
7006-
-> set<typename iterator_traits<InputIterator>::value_type,
7007-
less<typename iterator_traits<InputIterator>::value_type>, Allocator>;
7009+
-> set<@\placeholder{iter-value-type}@<InputIterator>,
7010+
less<@\placeholder{iter-value-type}@<InputIterator>>, Allocator>;
70087011

70097012
template<class Key, class Allocator>
70107013
set(initializer_list<Key>, Allocator) -> set<Key, less<Key>, Allocator>;
@@ -7258,20 +7261,20 @@
72587261
};
72597262

72607263
template<class InputIterator,
7261-
class Compare = less<typename iterator_traits<InputIterator>::value_type>,
7262-
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
7264+
class Compare = less<@\placeholder{iter-value-type}@<InputIterator>>,
7265+
class Allocator = allocator<@\placeholder{iter-value-type}@<InputIterator>>>
72637266
multiset(InputIterator, InputIterator,
72647267
Compare = Compare(), Allocator = Allocator())
7265-
-> multiset<typename iterator_traits<InputIterator>::value_type, Compare, Allocator>;
7268+
-> multiset<@\placeholder{iter-value-type}@<InputIterator>, Compare, Allocator>;
72667269

72677270
template<class Key, class Compare = less<Key>, class Allocator = allocator<Key>>
72687271
multiset(initializer_list<Key>, Compare = Compare(), Allocator = Allocator())
72697272
-> multiset<Key, Compare, Allocator>;
72707273

72717274
template<class InputIterator, class Allocator>
72727275
multiset(InputIterator, InputIterator, Allocator)
7273-
-> multiset<typename iterator_traits<InputIterator>::value_type,
7274-
less<typename iterator_traits<InputIterator>::value_type>, Allocator>;
7276+
-> multiset<@\placeholder{iter-value-type}@<InputIterator>,
7277+
less<@\placeholder{iter-value-type}@<InputIterator>>, Allocator>;
72757278

72767279
template<class Key, class Allocator>
72777280
multiset(initializer_list<Key>, Allocator) -> multiset<Key, less<Key>, Allocator>;
@@ -7356,7 +7359,8 @@
73567359
\tcode{unordered_set} and \tcode{unordered_multiset}.
73577360

73587361
\pnum
7359-
The exposition-only alias templates \tcode{iter_key_t}, \tcode{iter_val_t}, and \tcode{iter_to_alloc_t}
7362+
The exposition-only alias templates \placeholder{iter-value-type},
7363+
\placeholder{iter-key-type}, \placeholder{iter-mapped-type}, and \placeholder{iter-to-alloc-type}
73607364
defined in \ref{associative.general} may appear in deduction guides for unordered containers.
73617365

73627366
\rSec2[unord.map.syn]{Header \tcode{<unordered_map>} synopsis}%
@@ -7694,12 +7698,12 @@
76947698
};
76957699

76967700
template<class InputIterator,
7697-
class Hash = hash<iter_key_t<InputIterator>>,
7698-
class Pred = equal_to<iter_key_t<InputIterator>>,
7699-
class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
7701+
class Hash = hash<@\placeholder{iter-key-type}@<InputIterator>>,
7702+
class Pred = equal_to<@\placeholder{iter-key-type}@<InputIterator>>,
7703+
class Allocator = allocator<@\placeholder{iter-to-alloc-type}@<InputIterator>>>
77007704
unordered_map(InputIterator, InputIterator, typename @\seebelow@::size_type = @\seebelow@,
77017705
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
7702-
-> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash, Pred,
7706+
-> unordered_map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>, Hash, Pred,
77037707
Allocator>;
77047708

77057709
template<class Key, class T, class Hash = hash<Key>,
@@ -7711,20 +7715,20 @@
77117715

77127716
template<class InputIterator, class Allocator>
77137717
unordered_map(InputIterator, InputIterator, typename @\seebelow@::size_type, Allocator)
7714-
-> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
7715-
hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>,
7716-
Allocator>;
7718+
-> unordered_map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
7719+
hash<@\placeholder{iter-key-type}@<InputIterator>>,
7720+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
77177721

77187722
template<class InputIterator, class Allocator>
77197723
unordered_map(InputIterator, InputIterator, Allocator)
7720-
-> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
7721-
hash<iter_key_t<InputIterator>>, equal_to<iter_key_t<InputIterator>>,
7722-
Allocator>;
7724+
-> unordered_map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
7725+
hash<@\placeholder{iter-key-type}@<InputIterator>>,
7726+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
77237727

77247728
template<class InputIterator, class Hash, class Allocator>
77257729
unordered_map(InputIterator, InputIterator, typename @\seebelow@::size_type, Hash, Allocator)
7726-
-> unordered_map<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash,
7727-
equal_to<iter_key_t<InputIterator>>, Allocator>;
7730+
-> unordered_map<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>, Hash,
7731+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
77287732

77297733
template<class Key, class T, class Allocator>
77307734
unordered_map(initializer_list<pair<const Key, T>>, typename @\seebelow@::size_type,
@@ -8230,14 +8234,14 @@
82308234
};
82318235

82328236
template<class InputIterator,
8233-
class Hash = hash<iter_key_t<InputIterator>>,
8234-
class Pred = equal_to<iter_key_t<InputIterator>>,
8235-
class Allocator = allocator<iter_to_alloc_t<InputIterator>>>
8237+
class Hash = hash<@\placeholder{iter-key-type}@<InputIterator>>,
8238+
class Pred = equal_to<@\placeholder{iter-key-type}@<InputIterator>>,
8239+
class Allocator = allocator<@\placeholder{iter-to-alloc-type}@<InputIterator>>>
82368240
unordered_multimap(InputIterator, InputIterator,
82378241
typename @\seebelow@::size_type = @\seebelow@,
82388242
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
8239-
-> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash, Pred,
8240-
Allocator>;
8243+
-> unordered_multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
8244+
Hash, Pred, Allocator>;
82418245

82428246
template<class Key, class T, class Hash = hash<Key>,
82438247
class Pred = equal_to<Key>, class Allocator = allocator<pair<const Key, T>>>
@@ -8248,21 +8252,21 @@
82488252

82498253
template<class InputIterator, class Allocator>
82508254
unordered_multimap(InputIterator, InputIterator, typename @\seebelow@::size_type, Allocator)
8251-
-> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
8252-
hash<iter_key_t<InputIterator>>,
8253-
equal_to<iter_key_t<InputIterator>>, Allocator>;
8255+
-> unordered_multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
8256+
hash<@\placeholder{iter-key-type}@<InputIterator>>,
8257+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
82548258

82558259
template<class InputIterator, class Allocator>
82568260
unordered_multimap(InputIterator, InputIterator, Allocator)
8257-
-> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>,
8258-
hash<iter_key_t<InputIterator>>,
8259-
equal_to<iter_key_t<InputIterator>>, Allocator>;
8261+
-> unordered_multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>,
8262+
hash<@\placeholder{iter-key-type}@<InputIterator>>,
8263+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
82608264

82618265
template<class InputIterator, class Hash, class Allocator>
82628266
unordered_multimap(InputIterator, InputIterator, typename @\seebelow@::size_type, Hash,
82638267
Allocator)
8264-
-> unordered_multimap<iter_key_t<InputIterator>, iter_val_t<InputIterator>, Hash,
8265-
equal_to<iter_key_t<InputIterator>>, Allocator>;
8268+
-> unordered_multimap<@\placeholder{iter-key-type}@<InputIterator>, @\placeholder{iter-mapped-type}@<InputIterator>, Hash,
8269+
equal_to<@\placeholder{iter-key-type}@<InputIterator>>, Allocator>;
82668270

82678271
template<class Key, class T, class Allocator>
82688272
unordered_multimap(initializer_list<pair<const Key, T>>, typename @\seebelow@::size_type,
@@ -8571,12 +8575,12 @@
85718575
};
85728576

85738577
template<class InputIterator,
8574-
class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
8575-
class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
8576-
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
8578+
class Hash = hash<@\placeholder{iter-value-type}@<InputIterator>>,
8579+
class Pred = equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
8580+
class Allocator = allocator<@\placeholder{iter-value-type}@<InputIterator>>>
85778581
unordered_set(InputIterator, InputIterator, typename @\seebelow@::size_type = @\seebelow@,
85788582
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
8579-
-> unordered_set<typename iterator_traits<InputIterator>::value_type,
8583+
-> unordered_set<@\placeholder{iter-value-type}@<InputIterator>,
85808584
Hash, Pred, Allocator>;
85818585

85828586
template<class T, class Hash = hash<T>,
@@ -8587,16 +8591,16 @@
85878591

85888592
template<class InputIterator, class Allocator>
85898593
unordered_set(InputIterator, InputIterator, typename @\seebelow@::size_type, Allocator)
8590-
-> unordered_set<typename iterator_traits<InputIterator>::value_type,
8591-
hash<typename iterator_traits<InputIterator>::value_type>,
8592-
equal_to<typename iterator_traits<InputIterator>::value_type>,
8594+
-> unordered_set<@\placeholder{iter-value-type}@<InputIterator>,
8595+
hash<@\placeholder{iter-value-type}@<InputIterator>>,
8596+
equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
85938597
Allocator>;
85948598

85958599
template<class InputIterator, class Hash, class Allocator>
85968600
unordered_set(InputIterator, InputIterator, typename @\seebelow@::size_type,
85978601
Hash, Allocator)
8598-
-> unordered_set<typename iterator_traits<InputIterator>::value_type, Hash,
8599-
equal_to<typename iterator_traits<InputIterator>::value_type>,
8602+
-> unordered_set<@\placeholder{iter-value-type}@<InputIterator>, Hash,
8603+
equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
86008604
Allocator>;
86018605

86028606
template<class T, class Allocator>
@@ -8873,12 +8877,12 @@
88738877
};
88748878

88758879
template<class InputIterator,
8876-
class Hash = hash<typename iterator_traits<InputIterator>::value_type>,
8877-
class Pred = equal_to<typename iterator_traits<InputIterator>::value_type>,
8878-
class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
8880+
class Hash = hash<@\placeholder{iter-value-type}@<InputIterator>>,
8881+
class Pred = equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
8882+
class Allocator = allocator<@\placeholder{iter-value-type}@<InputIterator>>>
88798883
unordered_multiset(InputIterator, InputIterator, @\seebelow@::size_type = @\seebelow@,
88808884
Hash = Hash(), Pred = Pred(), Allocator = Allocator())
8881-
-> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
8885+
-> unordered_multiset<@\placeholder{iter-value-type}@<InputIterator>,
88828886
Hash, Pred, Allocator>;
88838887

88848888
template<class T, class Hash = hash<T>,
@@ -8889,16 +8893,16 @@
88898893

88908894
template<class InputIterator, class Allocator>
88918895
unordered_multiset(InputIterator, InputIterator, typename @\seebelow@::size_type, Allocator)
8892-
-> unordered_multiset<typename iterator_traits<InputIterator>::value_type,
8893-
hash<typename iterator_traits<InputIterator>::value_type>,
8894-
equal_to<typename iterator_traits<InputIterator>::value_type>,
8896+
-> unordered_multiset<@\placeholder{iter-value-type}@<InputIterator>,
8897+
hash<@\placeholder{iter-value-type}@<InputIterator>>,
8898+
equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
88958899
Allocator>;
88968900

88978901
template<class InputIterator, class Hash, class Allocator>
88988902
unordered_multiset(InputIterator, InputIterator, typename @\seebelow@::size_type,
88998903
Hash, Allocator)
8900-
-> unordered_multiset<typename iterator_traits<InputIterator>::value_type, Hash,
8901-
equal_to<typename iterator_traits<InputIterator>::value_type>,
8904+
-> unordered_multiset<@\placeholder{iter-value-type}@<InputIterator>, Hash,
8905+
equal_to<@\placeholder{iter-value-type}@<InputIterator>>,
89028906
Allocator>;
89038907

89048908
template<class T, class Allocator>

0 commit comments

Comments
 (0)