Version 6.5

Version 6.5 completes C++20 support (except for the "modules" feature), adds
significant C23 and C++23 features, and increases compatibility with recently
released versions of Visual Studio, GCC, and Clang.

The implementation status of each of the C and C++ features that have been
voted into a draft working paper can be found at this link:
https://www.edg.com/c/features.  More specifically, these are the features
that have been implemented since 6.4:

C++20:
 - Wording for Class Template Argument Deduction for Alias Templates (P1814R0)

C++23:
 - Literal Suffix for (signed) size_t (P0330R8)
 - DR: Allow Duplicate Attributes (P2156R1)
 - Add support for preprocessing directives elifdef and elifndef (P2334R1)
 - Support for #warning
 - Labels at the end of compound statements (C compatibility) (P2324R2)

C23:
 - Harmonizing static_assert with C++ (N2265)
 - Adding the u8 character prefix (N2418)
 - Querying Attribute Support. (N2553)
 - Binary Literals (N2549)
 - Allow Duplicate Attributes (N2557)
 - Digit Separators (N2626)
 - Add Support for Preprocessing Directives #elifdef and #elifndef (N2645)
 - [[maybe_unused]] for Labels (N2662)
 - #warning Directive (N2686)
 - __has_include for C (N2799)
 - The _Noreturn Attribute (N2764)
 - Unicode Syntax Identifiers for C (N2836)
 - Not-So-Magic: typeof(...) (N2927)
 - Revised Spelling of Keywords (N2934)
 - Relax requirements for va_start (N2975)
 - Comma Omission and Deletion (__VA_OPT__ and Preprocessor Wording
   Improvements) (N3033)
 - Identifier Syntax Fixes (N2939)
 - Remove Trigraphs??! (N2940)
 - Free Positioning of Labels (N2508)

In addition, version 6.5 includes these significant changes (see the Changes
entry associated with the listed PR for more information):

  - Overload resolution failure diagnostics (EDGcpfe/22778)
  - GNU compatibility: _Float32x and _Float64x floating-point types
    (EDGcpfe/18316 et al)
  - Performance issue with recursively defined class templates (EDGcpfe/23765
    et al)
  - Excessive stack usage during IL walks (EDGcpfe/24033)
  - GNU compatibility: _Float32, _Float64, and _Float128 types (EDGcpfe/26221)
  - GNU and Clang compatibility: __fp16 type (EDGcpfe/18475 et al)
  - Add Initial SARIF Support (EDGcpfe/26133)

We are in the process of improving the diagnostics that the compiler issues.
The first step in this process was to change overload processing to be a
two-step process, emitting additional notes describing an overload failure on
the second pass.  This change can result in a large number of diagnostic
changes in your regression tests, so you might consider using the new
--no_add_match_notes command-line option (or setting DEFAULT_ADD_MATCH_NOTES
to FALSE) when doing your initial upgrade to 6.5 to minimize testing noise.
See the Changes entry for EDGcpfe/22778 for more information.

Our implementation of modules has improved considerably over 6.4 but remains
incomplete.  Our initial support of modules (completion date not yet known)
will allow the consumption of Microsoft IFC module files.  Microsoft module
support is enabled in Microsoft mode when microsoft_version is >= 1928.

Consuming Microsoft module files means importing IFC files produced by the
Microsoft compiler.  Currently, the compatibility of those files has a strong
dependence on the particular version of the Microsoft compiler used to produce
the files.  This version allows limited use of various IFC files shipped with
the Microsoft compiler, depending on what features the client code uses (i.e.,
some uses will be accepted while others will result in errors because of
features that are not yet supported).  The front end consumes files produced
by a pre-release version of the Microsoft compiler (19.33.31523.95 for x86,
IFC version 0.42).  The front end issues an error if the IFC has a version
newer than the supported version. Versions 0.33 and 0.41 are accepted by the
front end, but their use is not recommended.

Starting with version 6.0, the front end must be compiled as C++ code.  The
minimum compiler requirements have not changed, so they continue to be:

     g++: 4.8.1
     clang: 3.3
     MSVC: VS 2015 (tested with build 19.00.24215.1)

The front end can be self-compiled with a C-generating back end version for
platforms that lack a native C++ compiler.   We do not use exception handling
or RTTI, so those can be disabled to produce more efficient code.

We do not use the standard library specified in the C++ standard, so if your
code uses the standard library you don't have to worry about our possible use
of an incompatible version of the library.

Our builtin function support is current with GCC 13.1.0 and Clang 16.0.0.

As usual, we have fixed bugs, added many minor features, and continued to
improve our various compatibility modes.  See the Changes_6.5 file for
full details (about 3,800 lines).

This release includes a new target-dependent variable.  If you are using
run-time target configurations (other than the default ones we provide), you
will need to update those to include a new target-specific configuration macro
with appropriate values for each of your target configurations.  The new
target configuration macro is:

	TARG_SIZEOF_LARGEST_ATOMIC
       
Note that if you do not provide the necessary configuration macro, you
will get build errors along the lines of "TARG_XXX_my_config undefined".
