/**
\page changes Changes

\section changes_changes_to_520 5.2.0

<ul>

<li>Cleaned up <code>clang-22</code> warnings.</li>

</ul>

\subsection changes_added_functionality_to_520 Added functionality

<ul>

<li>\ref fcpptcontainer
	<ul>
	<li>Added #fcppt::container::uncons_string_view.</li>
	</ul>
</li>

<li>\ref fcppteither
	<ul>
	<li>Added #fcppt::either::from.</li>
	</ul>
</li>

<li>\ref fcpptenum
	<ul>
	<li>Added #fcppt::enum_::array::get as an alternative to <code>operator[]</code>.</li>
	</ul>
</li>

<li>\ref fcpptmpl
	<ul>
	<li>Added #fcppt::mpl::type.</li>
	</ul>
</li>

<li>\ref fcpptoptional
	<ul>
	<li>Added #fcppt::optional::return_if.</li>
	</ul>
</li>

<li>\ref fcpptstrongtypedef
	<ul>
	<li>Added <code>operator<=></code>.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_520 Changed functionality

<ul>

<li>\ref fcpptoptions
	<ul>
	<li>Changed #fcppt::options::flag_name_set and #fcppt::options::option_name_set to be unordered sets.</li>
	</ul>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Changed #fcppt::parse::typed_error to use a <code>std::type_index</code> instead of a string.</li>
	</ul>
</li>

<li>\ref fcpptstring
	<ul>
	<li>#fcppt::system now throws #fcppt::system_conversion_failed if the input string cannot be converted.</li>
	<li>#fcppt::widen and #fcppt::widen_locale now throw #fcppt::string_to_wstring_conversion_failed in case of an error.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_520 Removed functionality

<ul>

<li>fcppttime
	<ul>
	<li>Removed the library, which only consisted of wrappers around <code>std::tm</code>-based functions.
	</ul>
</li>

</ul>

\section changes_changes_to_510 5.1.0

\subsection changes_added_functionality_to_510 Added functionality

<ul>

<li>\ref fcpptalgorithm
	<ul>
	<li>Added #fcppt::algorithm::remove_suffix.</li>
	</ul>
</li>

<li>\ref fcppteither
	<ul>
	<li>Added #fcppt::either::sequence_all, which collects all errors instead of the first one.</li>
	</ul>
</li>

<li>\ref fcpptindent
	<p>A new library for indented output.</p>
</li>

<li>\ref fcpptpreprocessor
	<ul>
	<li>Added #FCPPT_PP_CAT.</li>
	<li>Added #FCPPT_PP_STRINGIZE_NARROW.</li>
	</ul>
</li>

<li>\ref fcppttypetraits
	<ul>
	<li>Added #fcppt::type_traits::size_type.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_510 Changed functionality

<ul>

<li>\ref fcpptalgorithm
	<ul>
	<li>Made #fcppt::algorithm::map_optional work on polymorphic sequences as well.</li>
	</ul>
</li>

<li>\ref fcpptoptions
	<ul>
	<li>Reject argument/flag/option/sub command names that start with a <code>-</code>.</li>
	<li>Active/inactive flag values don't need to be different anymore.</li>
	<li>Short/long flag/option names don't need to be different anymore.</li>
	<li>Hid #fcppt::recursive types in structs/classes.</li>
	<li>Continue parsing in #fcppt::options::product in case of #fcppt::options::missing_error.</li>
	<li>Improved the typing of #fcppt::options::duplicate_names.</li>
	</ul>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Improved the typing of #fcppt::parse::parse_stream_error.</li>
	</ul>
</li>

<li>\ref fcpptrecord
	<ul>
	<li>Improved #fcppt::record::label_name.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_510 Bugfixes

<ul>

<li>\ref fcpptoptions
	<ul>
	<li>Fixed indentation in the output of #fcppt::options::sub_command_usage.</li>
	</ul>
</li>

<li>\ref fcpptvarious
	<ul>
	<li>Fixed #fcppt::type_name on clang.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_500 5.0.0

<p>
fcppt now uses <code>C++-23</code>.
</p>

<ul>

<li>Cleaned up <code>clang-21</code> warnings.</li>
<li>Replaced various components with <code>C++-20</code> ranges.</li>

</ul>

\subsection changes_added_functionality_to_500 Added functionality

<ul>

<li>\ref fcppteither
	<ul>
	<li>Added #fcppt::either::partition.</li>
	<li>Added #fcppt::either::to_variant.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_500 Changed functionality

<ul>

<li>\ref fcppteither
	<ul>
	<li>Changed the implementation to use <code>std::expected</code>.</li>
	</ul>
</li>

<li>\ref fcpptrange
	<ul>
	<li>Renamed <code>fcppt::range::size</code> to #fcppt::range::nonconst_size.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_500 Removed functionality

<ul>

<li>\ref fcpptalgorithm
	<ul>
	<li>Removed <code>fcppt::algorithm::contains</code>. Use <code>std::ranges::contains</code>.</li>
	<li>Removed <code>fcppt::algorithm::equal</code>. Use <code>std::ranges::equal</code>.</li>
	<li>Removed <code>fcppt::algorithm::equal_range</code>. Use <code>std::ranges::equal_range</code>.</li>
	<li>Removed <code>fcppt::algorithm::range_value_type</code>. Use <code>std::ranges::range_value_t</code>.</li>
	</ul>
</li>

<li>\ref fcpptconcepts
	<ul>
	<li>Removed <code>fcppt::concepts::invocable</code>. Use <code>std::invocable</code>.</li>
	<li>Removed <code>fcppt::concepts::range</code>. Use one of the range concepts from <code>std::ranges</code>.</li>
	</ul>
</li>

<li>\ref fcpptiterator
	<ul>
	<li>Removed <code>fcppt::iterator::range</code>. Use <code>std::ranges::subrange</code>.</li>
	</ul>
</li>

<li>\ref fcpptpreprocessor
	<ul>
	<li>Removed <code>FCPPT_PP_PURE</code> and <code>FCPPT_PP_CONST</code>.</li>
	<li>Removed <code>FCPPT_PP_WARNING</code>. Use <code>\#warning</code> from <code>C++-23</code>.</li>
	</ul>
</li>

<li>\ref fcpptrange
	<ul>
	<li>Removed <code>fcppt::range::empty</code>. Use <code>std::ranges::empty</code>.</li>
	<li>Removed <code>fcppt::range::begin</code>. Use <code>std::ranges::begin</code>.</li>
	<li>Removed <code>fcppt::range::end</code>. Use <code>std::ranges::end</code>.</li>
	</ul>
</li>

<li>\ref fcpptvarious
	<ul>
	<li>Removed <code>fcppt::args_range</code>.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_500 Bugfixes

<ul>

<li>Fixed moving of elements in #fcppt::variant::partition.</li>

<li>Fixed #fcppt::container::grid::pos_iterator and #fcppt::container::grid::pos_ref_iterator to conform to <code>std::input_iterator</code>.</li>

</ul>

\section changes_changes_to_461 4.6.1

<ul>

<li>Cleaned up <code>clang-20</code> warnings.</li>

</ul>

\subsection changes_bugfixes_to_461 Bugfixes

<ul>

<li>Fixed #fcppt::filesystem::file_size to actually not throw exceptions.</li>

</ul>

\section changes_changes_to_460 4.6.0

<ul>

<li>Cleaned up <code>clang-19</code> warnings.</li>

</ul>

\subsection changes_added_functionality_to_460 Added functionality

<ul>

<li>\ref fcpptoptional
	<ul>
	<li>Added <code>std::hash</code> specialization.</li>
	</ul>
</li>

<li>\ref fcpptvariant
	<ul>
	<li>Added <code>std::hash</code> specialization.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_460 Changed functionality

<ul>

<li>\ref fcpptcontainerbitfield
	<ul>
	<li>Changed the default internal type. It is now the smallest integer that all bits fit into.</li>
	</ul>
</li>

<li>\ref fcpptenum
	<ul>
	<li>Removed the default implementation of #fcppt::enum_::max_value to no longer use <code>fcppt_maximum</code>.
	Instead, there is now a customization point using #fcppt::enum_::max_value_impl.
	Also added #FCPPT_ENUM_DEFINE_MAX_VALUE to make defining this easier.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_460 Removed functionality

<ul>

<li>\ref fcpptcontainergrid
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptcontainerraw_vector
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptmathbox
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptmathdim
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptmathvector
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptoptional
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

<li>\ref fcpptvariant
	<ul>
	<li>Removed ordering operators.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_460 Bugfixes

<ul>

<li>Fixed compilation with <code>clang-19</code>.</li>

</ul>

\section changes_changes_to_450 4.5.0

<ul>

<li>Cleaned up <code>clang-18</code> warnings.</li>
<li>Added MSVC and MacOS CI/CD on Github.</li>
<li>Overhauled and documented CMake files, using <code>cmake-format</code> and <code>cmake-lint</code>.</li>
<li>Added the ability to also compile header files using <code>misc-include-cleaner</code> from <code>clang-tidy</code> and cleaned up all includes in header files as a result.</li>

</ul>

\subsection changes_added_functionality_to_450 Added functionality

<ul>

<li>\ref fcpptenum
	<ul>
	<li>Added the #fcppt::enum_::invalid exception and #fcppt::enum_::make_invalid as a replacement for the remaining uses of <code>FCPPT_ASSERT_UNREACHABLE</code>.</li>
	<li>Added #fcppt::enum_::array_map.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_450 Changed functionality

<ul>

<li>\ref fcpptlog
	<p>
	Redesigned how log formatting works. The main class is now #fcppt::log::level_stream and the functions in <code>fcppt::log::format</code> have been removed.
	</p>
</li>

<li>\ref fcpptrecord
	<ul>
	<li>Changed <code>fcppt::record::enable_vararg_ctor</code> to #fcppt::record::is_vararg_ctor.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_450 Removed functionality

<ul>

<li>fcpptassert
	<ul>
	<li>Removed <code>FCPPT_ASSERT_UNREACHABLE</code>.</li>
	</ul>
</li>

<li>\ref fcpptiterator
	<ul>
	<li>Removed <code>fcppt::iterator::adapt_range</code>.</li>
	</ul>
</li>

<li>\ref fcpptrandom <ul>
	<li>Removed <code>fcppt::random::distribution::parameters::make_uniform_indices</code>.
	The version #fcppt::random::distribution::parameters::make_uniform_indices_advanced still exists.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_450 Bugfixes

<ul>

<li>\ref fcpptenum
	<ul>
	<li>Fixed enum size types for small enums.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_441 4.4.1

<ul>

<li>Cleaned up <code>clang-17</code> warnings.</li>
<li>Added Include-What-You-Use pragmas.</li>

</ul>

\subsection changes_added_functionality_to_441 Added functionality

<ul>

<li>\ref fcpptmpl
	<ul>
	<li>Added #fcppt::mpl::apply_v.</li>
	<li>Added #fcppt::mpl::is_invocable_v.</li>
	<li>Added #fcppt::mpl::list::all_of_v.</li>
	<li>Added #fcppt::mpl::list::any_of_v.</li>
	<li>Added #fcppt::mpl::list::contains_v.</li>
	<li>Added #fcppt::mpl::list::distinct_v.</li>
	<li>Added #fcppt::mpl::list::empty_v.</li>
	<li>Added #fcppt::mpl::map::equal_v.</li>
	<li>Added #fcppt::mpl::map::has_key_v.</li>
	<li>Added #fcppt::mpl::set::contains_v.</li>
	<li>Added #fcppt::mpl::set::equal_v.</li>
	</ul>
</li>

<li>\ref fcpptrecord
	<ul>
	<li>Added #fcppt::record::all_disjoint_v.</li>
	<li>Added #fcppt::record::are_disjoint_v.</li>
	<li>Added #fcppt::record::are_equivalent_v.</li>
	</ul>
</li>

<li>\ref fcppttypetraits
	<ul>
	<li>Added #fcppt::type_traits::implication_v.</li>
	<li>Added #fcppt::type_traits::is_iterator_of_category_v.</li>
	</ul>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Added #fcppt::parse::skipper::is_skipper_v.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_440 4.4.0

<ul>

<li>Added a workaround for Apple Clang.</li>
<li>Cleaned up <code>clang-16</code> and <code>gcc-13</code> warnings.</li>

</ul>

\subsection changes_changed_functionality_to_440 Changed functionality

<ul>

<li>\ref fcpptboost
	<ul>
	<li>Use <code>fcppt::ref</code> in the constructor of #fcppt::scoped_state_machine.</li>
	</ul>
</li>

<li>\ref fcpptoptions
	<ul>
	<li>Changed error types from just being strings to having actual structure.</li>
	<li>Changed the return type of <code>usage</code> from a string to #fcppt::options::usage.
	In addition, #fcppt::options::help_result now also uses #fcppt::options::usage instead
	of #fcppt::options::help_text.</li>
	</ul>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Changed error types from just being strings to having actual structure.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_440 Removed functionality

<ul>

<li>fcpptassert
	<ul>
	<li>Removed most of the library.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_440 Bugfixes

<ul>

<li>\ref fcpptstring
	<ul>
	<li>Added missing <code>FCPPT_DETAIL_SYMBOL</code> on <code>fcppt::exception::string</code>.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_430 4.3.0

<ul>

<li>Switched from <code>Catch-2</code> to <code>Catch-3</code> for unit tests.</li>
<li>Fixed some warnings related to <code>clang-15</code>.</li>
<li>Support for <code>VC++-14.34</code> (Visual Studio 2022 Version 17.4).</li>

</ul>

\subsection changes_added_functionality_to_430 Added functionality

<ul>

<li>\ref fcpptoptional
	<ul>
	<li>Added #fcppt::optional::get_or_assign.</li>
	</ul>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Added #fcppt::parse::exclude.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_430 Removed functionality

<ul>

<li>fcpptassert
	<ul>
	<li>Removed <code>FCPPT_ASSERT_OPTIONAL_ERROR</code>.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_430 Bugfixes

<ul>

<li>\ref fcpptparse
	<ul>
	<li>Fixed #fcppt::parse::parse_stream.</li>
	<li>Fixed #fcppt::parse::skipper::basic_space char type.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_421 4.2.1

<p>
Support for <code>VC++-14.32</code> (Visual Studio 2022 Version 17.2).
</p>

\section changes_changes_to_420 4.2.0

\subsection changes_added_functionality_to_420 Added functionality

<p>
This release fixes some warnings related to <code>clang-14</code>.
</p>

<ul>

<li>\ref fcppttuple
	<ul>
	<li>Added #fcppt::tuple::as_struct.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_420 Removed functionality

<ul>

<li>\ref fcpptfilesystem
	<ul>
	<li>Removed <code>fcppt::filesystem::replace_extension</code>. Use <code>std::filesystem::path::replace_extension</code>.</li>
	<li>Removed <code>fcppt::filesystem::strip_prefix</code>. Use <code>std::filesystem::relative</code>.</li>
	<li>Removed <code>fcppt::filesystem::num_subpaths</code>.</li>
	<li>Removed <code>fcppt::filesystem::normalize</code>.</li>
	<li>Removed <code>fcppt::filesystem::stem</code>. Use <code>std::filesystem::path::stem</code>.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_410 4.1.0

<p>
This release fixes some warnings related to <code>clang-13</code>.
</p>

\subsection changes_added_functionality_to_410 Added functionality

<ul>

<li>\ref fcpptcontainerraw_vector
	<ul>
	<li>Added output operator for #fcppt::container::raw_vector::object.</li>
	</ul>
</li>

<li>\ref fcpptstrongtypedef
	<ul>
	<li>Added #fcppt::make_strong_typedef.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_410 Changed functionality

<ul>

<li>\ref fcpptcontainerraw_vector
	<ul>
	<li>Changed constructor of #fcppt::container::raw_vector::rep to use strong typedefs.</li>
	</ul>
</li>

<li>\ref fcpptmathbox
	<ul>
	<li>Changed constructor of #fcppt::math::box::object that took two points to use strong typedefs.</li>
	</ul>
</li>

<li>\ref fcpptstrongtypedef
	<ul>
	<li>Renamed <code>FCPPT_MAKE_STRONG_TYPEDEF</code> to #FCPPT_DECLARE_STRONG_TYPEDEF.</li>
	</ul>
</li>

</ul>

\section changes_changes_to_400 4.0.0

<p>
fcppt now uses <code>C++-20</code>. Some functions were updated to use concepts, but this is still a work in progress.
</p>

<p>
Metal is no longer required.
</p>

\subsection changes_added_functionality_to_400 Added functionality

<ul>

<li>\ref fcpptconcepts
	<p>
	New library with various C++20 concepts.
	</p>
</li>

<li>\ref fcpptcontainer
	<ul>
	<li>Added #fcppt::container::uncons.</li>
	</ul>
</li>

<li>\ref fcpptmpl
	<p>
	New library that replaces Metal.
	</p>
</li>

<li>\ref fcpptparse
	<ul>
	<li>Added #fcppt::parse::skipper::alternative, #fcppt::parse::skipper::any, #fcppt::parse::skipper::comment, #fcppt::parse::skipper::not_
	and #fcppt::parse::skipper::string.</li>
	<li>Added #fcppt::parse::with_location.</li>
	</ul>
</li>

<li>\ref fcpptrecord
	<ul>
	<li>Added support for #fcppt::algorithm::loop_break and #fcppt::algorithm::map.</li>
	<li>Added #fcppt::record::make.</li>
	<li>Exposed #fcppt::record::element_init, which was previously a member of <code>detail::</code>.</li>
	</ul>
</li>

<li>\ref fcpptstring
	<ul>
	<li>Added #fcppt::extract_from_string_fmt that allows to pass format flags.</li>
	<li>#fcppt::extract_from_string now also accepts rvalue strings.</li>
	</ul>
</li>

<li>\ref fcppttypetraits
	<ul>
	<li>Added #fcppt::type_traits::is_integral_constant.</li>
	</ul>
</li>

<li>\ref fcpptvariant
	<ul>
	<li>Added #fcppt::variant::partition.</li>
	</ul>
</li>

<li>\ref fcpptvarious
	<ul>
	<li>#fcppt::output has been added. Its behaviour can be specialized via #fcppt::output_impl.
	The default implementation uses <code>operator<<</code>.</li>
	<li>Added support for #fcppt::deref to #fcppt::recursive.</li>
	<li>Added <code>operator-></code> to #fcppt::recursive.</li>
	</ul>
</li>

</ul>

\subsection changes_changed_functionality_to_400 Changed functionality

<ul>

<li>\ref fcpptalgorithm
	<ul>
	<li>The result type of #fcppt::algorithm::find_by_opt now has to be specified explicitly.
	This makes the algorithm work on heterogeneous ranges (like tuples) as well.
	</li>
	</ul>
</li>

<li>\ref fcppteither
	<ul>
	<li>The result type of #fcppt::either::sequence is now the full either type instead of its success type.
	This makes the function work on heterogeneous ranges (like tuples) as well.
	</ul>
</li>

<li>\ref fcpptstring
	<ul>
	<li><code>fcppt::extract_from_string_locale</code> has been renamed
	to #fcppt::extract_from_string_locale_fmt and has gained an additional
	format flags parameter.</li>
	</ul>
</li>

<li><code>fcppttime</code>
	<ul>
	<li><code>fcppt::time::gmtime</code>, <code>fcppt::time::localtime</code> and <code>fcppt::time::std_time</code> now use <code>std::exception</code> instead of #fcppt::exception.</li>
	<li><code>fcppt::time::output_tm</code> is now a template over the char and traits types.</li>
	</ul>
</li>

</ul>

\subsection changes_removed_functionality_to_400 Removed functionality

<ul>

<li>fcpptassert
	<ul>
	<li>Removed <code>FCPPT_ASSERT_UNIMPLEMENTED_MESSAGE</code>.</li>
	<li>Removed <code>FCPPT_ASSERT_PRE</code> and <code>FCPPT_ASSERT_PRE_MESSAGE</code>.</li>
	</ul>
</li>

<li>\ref fcpptcontainer
	<ul>
	<li>Removed <code>fcppt::container::contains</code>. In C++20, maps have a <code>contains</code> member function.</li>
	</ul>
</li>

<li>\ref fcpptendianness
	<ul>
	<li>Removed <code>fcppt::endianness::format</code>, <code>fcppt::endianness::is_big_endian</code>, <code>fcppt::endianness::is_little_endian</code> and <code>fcppt::endianness::host_format</code>.
	Use <code>std::endian</code> instead.</li>
	</ul>
</li>

<li>\ref fcpptmath
	<ul>
	<li>Removed <code>fcppt::math::pi</code> and <code>fcppt::math::twopi</code>. Use <code>std::numbers::pi_v</code> instead.</li>
	</ul>
</li>

<li>fcpptmetal
	<p>
	This has been removed in favor of \ref fcpptmpl.
	</p>
</li>

<li>\ref fcpptoptional
	<ul>
	<li>Removed <code>fcppt::optional::const_cast_</code>, <code>fcppt::optional::dynamic_cast_</code> and <code>fcppt::optional::static_cast_</code>.</li>
	</ul>
</li>

<li>\ref fcppttypetraits
	<ul>
	<li>Removed <code>fcppt::type_traits::remove_cv_ref_t</code>. Use <code>std::remove_cvref_t</code>.</li>
	<li>Removed <code>fcppt::type_traits::function_result</code>.</li>
	<li>Removed <code>fcppt::type_traits::is_float_or_double</code>.</li>
	</ul>
</li>

</ul>

\subsection changes_bugfixes_to_400 Bugfixes

<ul>

<li>\ref fcpptstring
	<ul>
	<li>Fixed failure condition of #fcppt::extract_from_string, #fcppt::extract_from_string_fmt and #fcppt::extract_from_string_locale_fmt.
	It was previously possible that every character of the string has been consumed but EOF has not been reached either.
	</li>
	</ul>
</li>

</ul>

*/
