@@ -132,16 +132,18 @@ decltype(*std::declval<const T1 &>()) f5(const T1 &a0) {
132132}
133133
134134template <
135- typename T1 , typename T2 = typename std::iterator_traits<T1 >::value_type,
135+ typename T3 , typename T1 = typename std::remove_reference<T3 >::type,
136+ typename T2 = typename std::iterator_traits<T1 >::value_type,
136137 typename = typename std::enable_if<
137138 (std::is_base_of<
138139 std::input_iterator_tag,
139140 typename std::iterator_traits<T1 >::iterator_category>::value ||
140141 std::is_base_of<
141142 std::output_iterator_tag,
142143 typename std::iterator_traits<T1 >::iterator_category>::value) &&
143- !std::is_pointer<T1 >::value>::type>
144- T1 &f6 (T1 &a0) {
144+ !std::is_pointer<T1 >::value &&
145+ std::is_lvalue_reference<T3 >::value>::type>
146+ T1 &f6 (T3 &&a0) {
145147 return ++a0;
146148}
147149
@@ -192,14 +194,15 @@ bool f10(const T1 &a0, const T1 &a1) {
192194 return a0 != a1;
193195}
194196
195- template <
196- typename T1 , typename T2 = typename std::iterator_traits<T1 >::value_type,
197- typename = typename std::enable_if<
198- std::is_base_of<
199- std::bidirectional_iterator_tag,
200- typename std::iterator_traits<T1 >::iterator_category>::value &&
201- !std::is_pointer<T1 >::value>::type>
202- T1 &f11 (T1 &a0) {
197+ template <typename T3 , typename T1 = typename std::remove_reference<T3 >::type,
198+ typename T2 = typename std::iterator_traits<T1 >::value_type,
199+ typename = typename std::enable_if<
200+ std::is_base_of<std::bidirectional_iterator_tag,
201+ typename std::iterator_traits<
202+ T1 >::iterator_category>::value &&
203+ !std::is_pointer<T1 >::value &&
204+ std::is_lvalue_reference<T3 >::value>::type>
205+ T1 &f11 (T3 &&a0) {
203206 return --a0;
204207}
205208
@@ -357,3 +360,30 @@ template <
357360T1 f24 (const T2 &a0) {
358361 return T1 (a0);
359362}
363+
364+ template <
365+ typename T3 , typename T1 = typename std::remove_reference<T3 >::type,
366+ typename T2 = typename std::iterator_traits<T1 >::value_type,
367+ typename = typename std::enable_if<
368+ (std::is_base_of<
369+ std::input_iterator_tag,
370+ typename std::iterator_traits<T1 >::iterator_category>::value ||
371+ std::is_base_of<
372+ std::output_iterator_tag,
373+ typename std::iterator_traits<T1 >::iterator_category>::value) &&
374+ !std::is_pointer<T1 >::value && !std::is_reference<T3 >::value>::type>
375+ T1 &f25 (T3 &&a0) {
376+ return ++a0;
377+ }
378+
379+ template <
380+ typename T3 , typename T1 = typename std::remove_reference<T3 >::type,
381+ typename T2 = typename std::iterator_traits<T1 >::value_type,
382+ typename = typename std::enable_if<
383+ std::is_base_of<
384+ std::bidirectional_iterator_tag,
385+ typename std::iterator_traits<T1 >::iterator_category>::value &&
386+ !std::is_pointer<T1 >::value && !std::is_reference<T3 >::value>::type>
387+ T1 &f26 (T3 &&a0) {
388+ return --a0;
389+ }
0 commit comments