File tree 2 files changed +11
-3
lines changed
2 files changed +11
-3
lines changed Original file line number Diff line number Diff line change @@ -181,9 +181,10 @@ struct infinite_range_proxy {
181
181
iterator begin_;
182
182
};
183
183
184
- template <typename T>
185
- range_proxy<T> range (T begin, T end) {
186
- return {begin, end};
184
+ template <typename T, typename U>
185
+ auto range (T begin, U end) -> range_proxy<typename std::common_type<T, U>::type> {
186
+ using C = typename std::common_type<T, U>::type;
187
+ return {static_cast <C>(begin), static_cast <C>(end)};
187
188
}
188
189
189
190
template <typename T>
Original file line number Diff line number Diff line change @@ -64,6 +64,13 @@ int main() {
64
64
print_range (range (8.0 , 1.0 ).step (-2.0 ));
65
65
cout << " \n " ;
66
66
67
+ cout << " Mixed type inference:\n " ;
68
+ print_range (range (0 , sizeof " Hello" ));
69
+ cout << " Inferred as mangled type name "
70
+ << typeid (typename std::iterator_traits<decltype (range (0 , sizeof " Hello" ).begin ())>::value_type).name ()
71
+ << " (expected: " << typeid (decltype (sizeof " Hello" )).name () << " )\n " ;
72
+ cout << " \n " ;
73
+
67
74
test_range_size (range (1 , 8 ).step (2 ));
68
75
test_range_size (range (8.0 , 1.0 ).step (-2.0 ));
69
76
test_range_size (range (8 , 1 ).step (-2 ));
You can’t perform that action at this time.
0 commit comments