goto mismatch;
}
- tree e_type = TREE_TYPE (e_inner);
+ tree& e_type = TREE_TYPE (e_inner);
tree d_type = TREE_TYPE (d_inner);
for (tree e_args = TYPE_ARG_TYPES (e_type),
dump (dumper::MERGE)
&& dump ("Propagating instantiated noexcept to %N", existing);
gcc_checking_assert (existing == e_inner);
- TREE_TYPE (existing) = d_type;
+ e_type = build_exception_variant (e_type, d_spec);
/* Propagate to existing clones. */
tree clone;
FOR_EACH_CLONE (clone, existing)
- {
- if (TREE_TYPE (clone) == e_type)
- TREE_TYPE (clone) = d_type;
- else
- TREE_TYPE (clone)
- = build_exception_variant (TREE_TYPE (clone), d_spec);
- }
+ TREE_TYPE (clone)
+ = build_exception_variant (TREE_TYPE (clone), d_spec);
}
}
else if (!DECL_MAYBE_DELETED (d_inner)
gcc_checking_assert (existing == e_inner);
FNDECL_USED_AUTO (existing) = true;
DECL_SAVED_AUTO_RETURN_TYPE (existing) = TREE_TYPE (e_type);
- TREE_TYPE (existing) = change_return_type (TREE_TYPE (d_type), e_type);
+ e_type = change_return_type (TREE_TYPE (d_type), e_type);
}
else if (d_undeduced && !e_undeduced)
/* EXISTING was deduced, leave it alone. */;
--- /dev/null
+namespace ranges {
+struct _Begin {
+ template <typename _Tp> auto operator()(_Tp __t) { return __t.begin(); }
+};
+struct _Data {
+ template <typename _Tp> auto operator()(_Tp __t) { return __t.data(); }
+};
+inline _Begin begin;
+inline _Data data;
+struct subrange;
+template <typename _Tp> struct view_interface {
+ subrange _M_derived();
+ auto data() noexcept(noexcept(begin(_M_derived()))) { return begin(_M_derived()); }
+};
+} // namespace ranges
+struct basic_string_view {
+ basic_string_view(const char *);
+ template <typename _Range>
+ basic_string_view(_Range __r) : _M_str(ranges::data(__r)) {}
+ char *_M_str;
+} typedef string_view;
+namespace ranges {
+struct subrange : view_interface<int> {
+ char *begin();
+};
+struct split_view {
+ struct _Iterator {
+ subrange operator*();
+ };
+ template <typename _Range> split_view(_Range, _Range);
+ _Iterator begin();
+};
+namespace views {
+inline
+struct _Split {
+ template <typename _Range, typename _Pattern>
+ auto operator()(_Range, _Pattern) {
+ return split_view(0, 0);
+ }
+} split;
+} // namespace views
+} // namespace ranges