%!TEX root = std.tex

\newcommand{\secref}[1]{\hyperref[\indexescape{#1}]{\indexescape{#1}}}

%%% Turn off page numbers for this glossary, they're not useful.
\newcommand{\swallow}[1]{}
\changeglossnumformat[xrefdelta]{|swallow}

\newcommand{\oldxref}[2]{\glossary[xrefdelta]{\indexescape{#1}}{#2}}
\newcommand{\removedxref}[1]{\oldxref{#1}{\textit{removed}}}
\newcommand{\movedxrefs}[2]{\oldxref{#1}{\textit{see} #2}}
\newcommand{\movedxref}[2]{\movedxrefs{#1}{\secref{#2}}}
\newcommand{\movedxrefii}[3]{\movedxrefs{#1}{\secref{#2}, \secref{#3}}}
\newcommand{\movedxrefiii}[4]{\movedxrefs{#1}{\secref{#2}, \secref{#3}, \secref{#4}}}
\newcommand{\deprxref}[1]{\oldxref{#1}{\textit{see} \secref{depr.#1}}}

%%% Removed features.
%%% Example:
%
%   \removedxref{removed.label}

\movedxref{res.on.expects}{structure.specifications}
\removedxref{variant.traits}

% [facets.examples] was removed.
\removedxref{facets.examples}

% P0588 replaced function prototype scope with function parameter scope.
\movedxref{basic.scope.proto}{basic.scope.param}

\movedxref{expr.pseudo}{expr.prim.id.dtor}

\movedxref{utility.from.chars}{charconv.from.chars}
\movedxref{utility.to.chars}{charconv.to.chars}

% [fs.definitions] and its contents were integrated into the main text.
% Note that ISO C++17 does not contain the [fs.def.*] subclauses.
\movedxrefs{fs.definitions}{%
  \secref{fs.class.path},
  \secref{fs.conform.os},
  \secref{fs.general},
  \secref{fs.path.fmt.cvt},
  \secref{fs.path.generic},
  \secref{fs.race.behavior}}

% Single-item array subclauses were dissolved.
\movedxref{array.size}{array.members}
\movedxref{array.data}{array.members}
\movedxref{array.fill}{array.members}
\movedxref{array.swap}{array.members}

% Contents of [util.smartptr] was integrated into the parent.
\removedxref{util.smartptr}

% Avoid duplication with synopsis.
\movedxref{re.regex.const}{re.regex}

% Single-item [insert.iterators] subclauses were dissolved.
\movedxref{back.insert.iter.cons}{back.insert.iter.ops}
\movedxref{back.insert.iter.op=}{back.insert.iter.ops}
\movedxref{back.insert.iter.op*}{back.insert.iter.ops}
\movedxref{back.insert.iter.op++}{back.insert.iter.ops}

\movedxref{front.insert.iter.cons}{front.insert.iter.ops}
\movedxref{front.insert.iter.op=}{front.insert.iter.ops}
\movedxref{front.insert.iter.op*}{front.insert.iter.ops}
\movedxref{front.insert.iter.op++}{front.insert.iter.ops}

\movedxref{insert.iter.cons}{insert.iter.ops}
\movedxref{insert.iter.op=}{insert.iter.ops}
\movedxref{insert.iter.op*}{insert.iter.ops}
\movedxref{insert.iter.op++}{insert.iter.ops}

% Single-item [reverse.iterators] subclauses were dissolved.
\movedxref{reverse.iter.op=}{reverse.iter.cons}

\movedxref{reverse.iter.op==}{reverse.iter.cmp}
\movedxref{reverse.iter.op<}{reverse.iter.cmp}
\movedxref{reverse.iter.op!=}{reverse.iter.cmp}
\movedxref{reverse.iter.op>}{reverse.iter.cmp}
\movedxref{reverse.iter.op>=}{reverse.iter.cmp}
\movedxref{reverse.iter.op<=}{reverse.iter.cmp}

\movedxref{reverse.iter.op.star}{reverse.iter.elem}
\movedxref{reverse.iter.opref}{reverse.iter.elem}
\movedxref{reverse.iter.opindex}{reverse.iter.elem}

\movedxref{reverse.iter.op+}{reverse.iter.nav}
\movedxref{reverse.iter.op-}{reverse.iter.nav}
\movedxref{reverse.iter.op++}{reverse.iter.nav}
\movedxref{reverse.iter.op+=}{reverse.iter.nav}
\movedxref{reverse.iter.op--}{reverse.iter.nav}
\movedxref{reverse.iter.op-=}{reverse.iter.nav}

\movedxref{reverse.iter.opdiff}{reverse.iter.nonmember}
\movedxref{reverse.iter.opsum}{reverse.iter.nonmember}
\movedxref{reverse.iter.make}{reverse.iter.nonmember}

\removedxref{reverse.iter.ops}

% Single-item [move.iterators] subclauses were dissolved.
\movedxref{move.iter.op=}{move.iter.cons}
\movedxref{move.iter.op.const}{move.iter.cons}

\movedxref{move.iter.op.star}{move.iter.elem}
\movedxref{move.iter.op.ref}{move.iter.elem}
\movedxref{move.iter.op.index}{move.iter.elem}

\movedxref{move.iter.op.+}{move.iter.nav}
\movedxref{move.iter.op.-}{move.iter.nav}
\movedxref{move.iter.op.incr}{move.iter.nav}
\movedxref{move.iter.op.+=}{move.iter.nav}
\movedxref{move.iter.op.decr}{move.iter.nav}
\movedxref{move.iter.op.-=}{move.iter.nav}

\removedxref{move.iter.ops}

% Individual swap sections were removed.
\removedxref{deque.special}
\removedxref{forwardlist.spec}
\removedxref{list.special}
\removedxref{vector.special}
\removedxref{map.special}
\removedxref{multimap.special}
\removedxref{set.special}
\removedxref{multiset.special}
\removedxref{unord.map.swap}
\removedxref{unord.multimap.swap}
\removedxref{unord.set.swap}
\removedxref{unord.multiset.swap}
\movedxref{re.regex.nmswap}{re.regex.nonmemb}

% Deprecated features were removed.
\removedxref{depr.except.spec}
\removedxref{depr.cpp.headers}
\removedxref{depr.uncaught}
\removedxref{depr.func.adaptor.binding}
\removedxref{depr.weak.result_type}
\removedxref{depr.func.adaptor.typedefs}
\removedxref{depr.negators}
\removedxref{depr.default.allocator}
\removedxref{depr.storage.iterator}
\removedxref{depr.temporary.buffer}
\removedxref{depr.util.smartptr.shared.obs}

% Deprecated <cfoo> headers were removed for some <foo.h> headers
\removedxref{depr.ccomplex.syn}
\removedxref{depr.cstdalign.syn}
\removedxref{depr.cstdbool.syn}
\removedxref{depr.ctgmath.syn}

\movedxref{class.copy}{class.mem}

% Top-level clause merging caused some Annex A subclauses to vanish.
\movedxref{gram.decl}{gram.dcl}
\movedxref{gram.derived}{gram.class}
\movedxref{gram.special}{gram.class}

% Top-level clause merging caused some Annex C subclauses to vanish, too.
\movedxref{diff.conv}{diff.expr}
\movedxref{diff.decl}{diff.dcl}
\movedxref{diff.special}{diff.class}
\movedxref{diff.cpp03.conv}{diff.cpp03.expr}
\movedxref{diff.cpp03.dcl.decl}{diff.cpp03.dcl.dcl}
\movedxref{diff.cpp03.special}{diff.cpp03.class}
\movedxref{diff.cpp11.dcl.decl}{diff.cpp11.dcl.dcl}
\movedxref{diff.cpp14.decl}{diff.cpp14.dcl.dcl}
\movedxref{diff.cpp14.special}{diff.cpp14.class}

% P1148R0 consolidated some Clause 20 subclauses.
\movedxref{string.rfind}{string.find}
\movedxref{string.find.first.of}{string.find}
\movedxref{string.find.last.of}{string.find}
\movedxref{string.find.first.not.of}{string.find}
\movedxref{string.find.last.not.of}{string.find}
\movedxref{string.op+=}{string.op.append}
\movedxref{string.op+}{string.op.plus}
\movedxref{string.operator==}{string.cmp}
\movedxref{string.op!=}{string.cmp}
\movedxref{string.op<}{string.cmp}
\movedxref{string.op>}{string.cmp}
\movedxref{string.op<=}{string.cmp}
\movedxref{string.op>=}{string.cmp}

\movedxref{istream::sentry}{istream.sentry}
\movedxref{ostream::sentry}{ostream.sentry}
\movedxref{ios::failure}{ios.failure}
\movedxref{ios::fmtflags}{ios.fmtflags}
\movedxref{ios::iostate}{ios.iostate}
\movedxref{ios::openmode}{ios.openmode}
\movedxref{ios::seekdir}{ios.seekdir}
\movedxref{ios::Init}{ios.init}

\removedxref{thread.decaycopy}

\movedxref{iterator.container}{iterator.range}

% Remove underscores in stable labels.
\movedxref{alg.all_of}{alg.all.of}
\movedxref{alg.any_of}{alg.any.of}
\movedxref{alg.is_permutation}{alg.is.permutation}
\movedxref{alg.none_of}{alg.none.of}
\movedxref{any.bad_any_cast}{any.bad.any.cast}
\movedxref{char.traits.specializations.char16_t}{char.traits.specializations.char16.t}
\movedxref{char.traits.specializations.char32_t}{char.traits.specializations.char32.t}
\movedxref{comparisons.equal_to}{comparisons.equal.to}
\movedxref{comparisons.greater_equal}{comparisons.greater.equal}
\movedxref{comparisons.less_equal}{comparisons.less.equal}
\movedxref{comparisons.not_equal_to}{comparisons.not.equal.to}
\movedxref{condition_variable.syn}{condition.variable.syn}
\movedxref{depr.static_constexpr}{depr.static.constexpr}
\movedxref{forward_list.syn}{forward.list.syn}
\movedxref{fs.class.directory_entry}{fs.class.directory.entry}
\movedxref{fs.class.directory_iterator}{fs.class.directory.iterator}
\movedxref{fs.class.file_status}{fs.class.file.status}
\movedxref{fs.class.filesystem_error}{fs.class.filesystem.error}
\movedxref{fs.enum.file_type}{fs.enum.file.type}
\movedxref{fs.file_status.cons}{fs.file.status.cons}
\movedxref{fs.file_status.mods}{fs.file.status.mods}
\movedxref{fs.file_status.obs}{fs.file.status.obs}
\movedxref{fs.filesystem_error.members}{fs.filesystem.error.members}
\movedxref{fs.op.copy_file}{fs.op.copy.file}
\movedxref{fs.op.copy_symlink}{fs.op.copy.symlink}
\movedxref{fs.op.create_directories}{fs.op.create.directories}
\movedxref{fs.op.create_directory}{fs.op.create.directory}
\movedxref{fs.op.create_dir_symlk}{fs.op.create.dir.symlk}
\movedxref{fs.op.create_hard_lk}{fs.op.create.hard.lk}
\movedxref{fs.op.create_symlink}{fs.op.create.symlink}
\movedxref{fs.op.current_path}{fs.op.current.path}
\movedxref{fs.op.file_size}{fs.op.file.size}
\movedxref{fs.op.hard_lk_ct}{fs.op.hard.lk.ct}
\movedxref{fs.op.is_block_file}{fs.op.is.block.file}
\movedxref{fs.op.is_char_file}{fs.op.is.char.file}
\movedxref{fs.op.is_directory}{fs.op.is.directory}
\movedxref{fs.op.is_empty}{fs.op.is.empty}
\movedxref{fs.op.is_fifo}{fs.op.is.fifo}
\movedxref{fs.op.is_other}{fs.op.is.other}
\movedxref{fs.op.is_regular_file}{fs.op.is.regular.file}
\movedxref{fs.op.is_socket}{fs.op.is.socket}
\movedxref{fs.op.is_symlink}{fs.op.is.symlink}
\movedxref{fs.op.last_write_time}{fs.op.last.write.time}
\movedxref{fs.op.read_symlink}{fs.op.read.symlink}
\movedxref{fs.op.remove_all}{fs.op.remove.all}
\movedxref{fs.op.resize_file}{fs.op.resize.file}
\movedxref{fs.op.status_known}{fs.op.status.known}
\movedxref{fs.op.symlink_status}{fs.op.symlink.status}
\movedxref{fs.op.temp_dir_path}{fs.op.temp.dir.path}
\movedxref{fs.op.weakly_canonical}{fs.op.weakly.canonical}
\movedxref{func.not_fn}{func.not.fn}
\movedxref{futures.future_error}{futures.future.error}
\movedxref{futures.shared_future}{futures.shared.future}
\movedxref{futures.unique_future}{futures.unique.future}
\movedxref{initializer_list.syn}{initializer.list.syn}
\movedxref{optional.comp_with_t}{optional.comp.with.t}
\movedxref{sf.cmath.assoc_laguerre}{sf.cmath.assoc.laguerre}
\movedxref{sf.cmath.assoc_legendre}{sf.cmath.assoc.legendre}
\movedxref{sf.cmath.comp_ellint_1}{sf.cmath.comp.ellint.1}
\movedxref{sf.cmath.comp_ellint_2}{sf.cmath.comp.ellint.2}
\movedxref{sf.cmath.comp_ellint_3}{sf.cmath.comp.ellint.3}
\movedxref{sf.cmath.cyl_bessel_i}{sf.cmath.cyl.bessel.i}
\movedxref{sf.cmath.cyl_bessel_j}{sf.cmath.cyl.bessel.j}
\movedxref{sf.cmath.cyl_bessel_k}{sf.cmath.cyl.bessel.k}
\movedxref{sf.cmath.cyl_neumann}{sf.cmath.cyl.neumann}
\movedxref{sf.cmath.ellint_1}{sf.cmath.ellint.1}
\movedxref{sf.cmath.ellint_2}{sf.cmath.ellint.2}
\movedxref{sf.cmath.ellint_3}{sf.cmath.ellint.3}
\movedxref{sf.cmath.riemann_zeta}{sf.cmath.riemann.zeta}
\movedxref{sf.cmath.sph_bessel}{sf.cmath.sph.bessel}
\movedxref{sf.cmath.sph_legendre}{sf.cmath.sph.legendre}
\movedxref{sf.cmath.sph_neumann}{sf.cmath.sph.neumann}
\movedxref{shared_mutex.syn}{shared.mutex.syn}
\movedxref{system_error.syn}{system.error.syn}
\movedxref{time.traits.duration_values}{time.traits.duration.values}
\movedxref{time.traits.is_fp}{time.traits.is.fp}
\movedxref{utility.as_const}{utility.as.const}

% Dissolved subclause.
\movedxref{func.wrap.badcall.const}{func.wrap.badcall}

% Shortened label
\movedxref{language.support}{support}

% Other fixes
\removedxref{intro.ack}

\movedxref{conversions}{locale.convenience}

% CD and DIS C++20
\removedxref{fs.norm.ref}
\movedxref{definitions}{intro.defs}
\removedxref{defns.arbitrary.stream}
\removedxref{defns.comparison}
\removedxref{defns.default.behavior.func}
\removedxref{defns.iostream.templates}
\removedxref{defns.repositional.stream}

% Fix solitary subclauses
\movedxref{unreachable.sentinels}{unreachable.sentinel}
\movedxref{default.sentinels}{default.sentinel}
\movedxref{depr.iterator.primitives}{depr.iterator}
\movedxref{depr.iterator.basic}{depr.iterator}

\movedxref{re.def}{intro.defs}
\movedxref{basic.scope.declarative}{basic.scope.scope}
\movedxref{basic.funscope}{stmt.label}
\movedxref{basic.scope.hiding}{basic.lookup}
\movedxref{basic.lookup.classref}{basic.lookup.qual}
\movedxref{namespace.memdef}{namespace.def}
\movedxref{class.this}{expr.prim.this}
\movedxref{class.mfct.non-static.general}{class.mfct.non.static}
\movedxref{class.nested.type}{diff.basic}
\movedxref{over.load}{basic.scope.scope}
\movedxref{over.dcl}{basic.link}
\movedxref{temp.nondep}{temp.res}
\movedxref{temp.inject}{temp.friend}

% P2096R2 Generalized wording for partial specializations
\movedxref{temp.class.spec}{temp.spec.partial}
\movedxref{temp.class.spec.general}{temp.spec.partial.general}
\movedxref{temp.class.spec.match}{temp.spec.partial.match}
\movedxref{temp.class.order}{temp.spec.partial.order}
\movedxref{temp.class.spec.mfunc}{temp.spec.partial.member}

\movedxref{forwardlist}{forward.list}
\movedxref{forwardlist.overview}{forward.list.overview}
\movedxref{forwardlist.cons}{forward.list.cons}
\movedxref{forwardlist.iter}{forward.list.iter}
\movedxref{forwardlist.access}{forward.list.access}
\movedxref{forwardlist.modifiers}{forward.list.modifiers}
\movedxref{forwardlist.ops}{forward.list.ops}

% P2186R2 Removing Garbage Collection Support
\removedxref{basic.stc.dynamic.safety}
\removedxref{util.dynamic.safety}
\removedxref{res.on.pointer.storage}

% LWG2818 "::std::" everywhere rule needs tweaking
\removedxref{fs.req.namespace}
\movedxref{fs.req.general}{fs.req}

% P2325R3 Views should not be required to be default constructible
% P2494R2 Relaxing range adaptors to allow for move only types
% range.semi.wrap => range.copy.wrap => range.move.wrap
\movedxref{range.semi.wrap}{range.move.wrap}

% P2210R2 Superior String Splitting
\movedxref{range.split.outer}{range.lazy.split.outer}
\movedxref{range.split.outer.value}{range.lazy.split.outer.value}
\movedxref{range.split.inner}{range.lazy.split.inner}

% P2128R6 Multidimensional subscript operator
\removedxref{depr.comma.subscript}

% P2340R1 Clarifying the status of the "C headers"
\movedxref{depr.c.headers}{support.c.headers}
\movedxref{depr.c.headers.general}{support.c.headers.general}
\movedxref{depr.c.headers.other}{support.c.headers.other}
\movedxref{depr.complex.h.syn}{complex.h.syn}
\movedxref{depr.iso646.h.syn}{iso646.h.syn}
\movedxref{depr.stdalign.h.syn}{stdalign.h.syn}
\movedxref{depr.stdbool.h.syn}{stdbool.h.syn}
\movedxref{depr.tgmath.h.syn}{tgmath.h.syn}

\movedxref{istringstream.assign}{istringstream.swap}
\movedxref{ostringstream.assign}{ostringstream.swap}
\movedxref{stringstream.assign}{stringstream.swap}
\movedxref{ifstream.assign}{ifstream.swap}
\movedxref{ofstream.assign}{ofstream.swap}
\movedxref{fstream.assign}{fstream.swap}

% P2387R3 Pipe support for user-defined range adaptors
\movedxref{func.bind.front}{func.bind.partial}

\movedxref{class.mfct.non-static}{class.mfct.non.static}
\movedxref{defns.direct-non-list-init}{dcl.init.list}
\movedxref{defns.expression-equivalent}{defns.expression.equivalent}

% P1467R9 Extended floating-point types and standard names
\movedxref{complex.special}{complex.members}
\movedxref{cstdint}{support.arith.types}
\removedxref{cstdint.general}

% LWG3659 Consider ATOMIC_FLAG_INIT undeprecation
\removedxref{depr.atomics.flag}

% LWG3818 Exposition-only concepts are not described in library intro
\movedxref{expos.only.func}{expos.only.entity}
\removedxref{expos.only.types}

% P2614R2 Deprecate numeric_limits::has_denorm
\movedxref{denorm.style}{depr.numeric.limits.has.denorm}
\removedxref{fp.style}

% CD and DIS C++2023
\movedxref{defns.multibyte}{multibyte.strings}

% P2864R2 Remove deprecated arithmetic conversions
\removedxref{depr.arith.conv.enum}

% P2866R5 Remove deprecated array comparisons
\removedxref{depr.array.comp}

% P2871R3 Remove deprecated <codecvt> header
\removedxref{depr.codecvt.syn}
\removedxref{depr.locale.stdcvt}
\removedxref{depr.locale.stdcvt.general}
\removedxref{depr.locale.stdcvt.req}

% P2870R3 Remove deprecated typedef from `std::allocator`
\removedxref{depr.default.allocator}

% P2874R2 Mandating Annex D
\removedxref{depr.res.on.required}

% P2870R3 Remove `basic_string::reserve()` with no parameters
\removedxref{depr.string.capacity}

% P2867R2 Remove deprecated strstreams
\removedxref{depr.istrstream}
\removedxref{depr.istrstream.cons}
\removedxref{depr.istrstream.general}
\removedxref{depr.istrstream.members}
\removedxref{depr.ostrstream}
\removedxref{depr.ostrstream.cons}
\removedxref{depr.ostrstream.general}
\removedxref{depr.ostrstream.members}
\removedxref{depr.str.strstreams}
\removedxref{depr.strstream}
\removedxref{depr.strstream.cons}
\removedxref{depr.strstream.dest}
\removedxref{depr.strstream.general}
\removedxref{depr.strstream.oper}
\removedxref{depr.strstream.syn}
\removedxref{depr.strstreambuf}
\removedxref{depr.strstreambuf.cons}
\removedxref{depr.strstreambuf.general}
\removedxref{depr.strstreambuf.members}
\removedxref{depr.strstreambuf.virtuals}

% P2869R4 Remove deprecated shared_ptr atomic access
\removedxref{depr.util.smartptr.shared.atomic}

% P2872R3 Remove wstring_convert
\removedxref{depr.conversions}
\removedxref{depr.conversions.buffer}
\removedxref{depr.conversions.general}
\removedxref{depr.conversions.string}

% Clause restructuring
\removedxref{type.index.overview}
\removedxref{type.index.members}
\removedxref{type.index.hash}

% CWG 2843 removed [uaxid.def.rfmt]
\removedxref{uaxid.def.rfmt}

% P3016R6 Resolve inconsistencies in begin/end for valarray and braced intializers
\removedxref{support.initlist.range}

%%% Renamed sections.
%%% Examples:
%
%   \movedxref{old.label}{new.label}
%   \movedxrefii{old.label}{new.label.1}{new.label.2}
%   \movedxrefiii{old.label}{new.label.1}{new.label.2}{new.label.3}
%   \movedxrefs{old.label}{new place (e.g., \tref{blah})}

% https://github.com/cplusplus/draft/pull/6255
\movedxref{container.gen.reqmts}{container.requirements.general}

% P2875R4 Undeprecate polymorphic_allocator::destroy
\movedxref{depr.mem.poly.allocator.mem}{mem.poly.allocator.mem}

% https://github.com/cplusplus/draft/pull/6653
\movedxref{mismatch}{alg.mismatch}

% P2300R10 std::execution
\movedxref{stopsource.nonmembers}{stopsource}
\movedxref{stoptoken.cons}{stopsource}
\movedxref{stoptoken.nonmembers}{stopsource}

% https://github.com/cplusplus/draft/pull/7276
\movedxref{except.uncaught}{except.throw}

% https://github.com/cplusplus/draft/pull/7345
\movedxref{basic.stc.inherit}{basic.stc.general}

% https://github.com/cplusplus/draft/pull/7524
\movedxref{expr.ass}{expr.assign}
\movedxref{over.ass}{over.assign}

% CWG 2024-11-20 in Wroclaw; https://github.com/cplusplus/draft/pull/7485
\movedxref{stmt.stmt}{stmt}
\movedxref{dcl.dcl}{dcl}

% P1494R5 added more to this section and expanded its scope
\movedxref{utility.unreachable}{utility.undefined}

%%% Deprecated features.
%%% Example:
%
%   \deprxref{old.label}  (if moved to depr.old.label, otherwise use \movedxref)

\removedxref{util.smartptr.shared.atomic}
\removedxref{res.on.required}
\deprxref{fs.path.factory}
\movedxref{operators}{depr.relops}

% P3475R2 Defang and deprecate memory_order::consume
\removedxref{dcl.attr.depend}

% P3348R3 C++26 should refer to C23 not C17
\removedxref{diff.header.assert.h}
\removedxref{diff.header.stdalign.h}
\removedxref{diff.header.stdbool.h}
