Version 6.4

The following C++20 features is now supported:

- Adopt source_location for C++20

6.4 also contains significant improvements in our support of concepts and
Microsoft modules (see below).

Our current C++20 implementation status (and links to the associated
standards committee papers) is available here:

    https://www.edg.com/cpp20_features.html

The following C++23 features are now supported:

- C++ Identifier Syntax using Unicode Standard Annex 31
- auto(x) and auto {x}
- Missing feature test macros for C++20 core papers
- Extended floating-point types and standard names

Our current C++23 implementation status (and links to the associated
standards committee papers) is available here:

    https://www.edg.com/cpp23_features.html

In addition, version 6.4 includes these significant changes:

- In-class explicit specializations are now supported (and more fully
  supported) in the appropriate modes (see Changes entry for EDGcpfe/20952)
- GNU/clang _Float16 support
- Improved support for ARM targets (see Changes entry for EDGcpfe/22994)
- Removal of enum "tags" in favor of enums with fixed underlying types (see
  Changes entry for EDGcpfe/25208)
- C23 mode, which includes:
  - C23 standard attributes
  - unnamed parameters

Use of source sequence lists for template instantiations is being
deprecated. This is enabled by setting
CLASS_TEMPLATE_INSTANTIATIONS_IN_SOURCE_SEQUENCE_LISTS and/or
NONCLASS_TEMPLATE_INSTANTIATIONS_IN_SOURCE_SEQUENCE_LISTS (those then
cause TEMPLATE_INSTANTIATIONS_IN_SOURCE_SEQUENCE_LISTS to be set). See
the Changes entry for EDGcpfe/25583.

We are in the process of implementing modules. Our initial support of
modules (completion date not yet known) will allow the consumption of
Microsoft IFC module files. Although Microsoft module support is still
not complete, it 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.


The front end includes a number of new source files that are part of
our IFC modules support. These files have names that begin with
"ifc_map_". They are generated by a tool (that will eventually be
provided with the product) and are used to allow future versions of
the front end to consume IFC files generated by multiple versions of
the Microsoft compiler.

Starting with version 6.0, the front end must be compiled as C++ code.
Although we are still using C++11, some of our recent additions require
newer versions of some compilers (this was actually true of version 6.3 but
was only discovered after the 6.3 release was made).  The current requirements
are:

     g++: 4.8.1 (previously 4.7.0)
     clang: 3.3 (previously 3.2)
     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 12.2.0 and Clang 15.0.0.

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

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

        TARG_SUPPORTS_ARM32
        TARG_SUPPORTS_ARM64
        TARG_SETJMP_FUNC
       
Note that if you do not provide the necessary configuration macros, you
will get build errors along the lines of "TARG_XXX_my_config undefined".
