Version 6.6

Version 6.6 is primarily a bug-fix release, although it does add support for
one C++23 feature and portions of two more. In addition, it continues to build
on the improvements for diagnostic output in version 6.5, addresses several
performance issues, and optionally provides experimental support for the
reflection feature currently under discussion by the C++ Standards Committee.

The C++23 features that have been addressed include:
* "Attributes on Lambda-Expressions" (P2173R1)
* Partial implementation of "Relaxing some constexpr restrictions" (P2448R2),
  specifically, removing the requirement that parameter and return types be
  literal types
* Completion of "Extended floating-point types and standard names" (P1467R9),
  specifically, fully supporting the std::bfloat16_t type

Diagnostic improvements include:
* Additional information for redefinition errors (EDGcpfe/26712, EDGcpfe/26717)
* Specifying the type in incomplete-type diagnostics (EDGcpfe/24232)
* Displaying the underlying type for typedefs and type aliases in diagnostic
  output (EDGcpfe/26831)

Performance issues have been addressed for cases involving many symbols with
similar names (EDGcpfe/26629), deep template instantiation nesting with large
numbers of base classes (EDGcpfe/26310), and classes with very large array
members (EDGcpfe/26693).

Version 6.6 contains experimental initial support for the reflection feature
currently under discussion in the C++ Standards Committee; see

https://docs.google.com/document/d/1cV05kpq-lsviLqF3_FtSyl9XBfR4DLO3vW1TVyihFPo

and EDGcpfe/26698. To enable this support, the front end must be built with
REFLECTION_ENABLING_POSSIBLE set to TRUE, and either the build must set
DEFAULT_REFLECTION_ENABLED to TRUE or the command-line option
--set_flag=reflection must be specified when the front end is invoked. In
addition, a new header, found in the release as
.../include_c++/experimental/meta.stdh, must be included in source files
(typically as #include <experimental/meta>). The new header includes some C++
standard library headers that are not provided by EDG (<optional>,
<string_view>, and <vector>) and must therefore be provided independently.

Version 6.6 updates built-in function support to clang version 17 and gcc
version 13.2. Unicode identifier support now reflects version 15.1.0 of the
Unicode standard.

Although not specifically release-related, a notable recent development is
that the EDG front end is now available on the Compiler Explorer web site,
https://godbolt.org. At the time of this writing, there three versions
available: one that defaults to GNU-compatible mode, one that represents the
default (no compiler emulation) front end (which can be invoked with
--strict/-A to rigorously enforce the rules of the relevant language
standard), and one that enables the experimental support for reflection. All
three use the C-generating back end and target gcc version 13 for compilation
of the generated C. We hope to provide additional choices of emulations and
versions in the future. (When reporting an issue in the front end, including a
link to a Compiler Explorer example demonstrating a failure can be an
excellent way to ensure that EDG can reproduce the problem.)

Our implementation of modules has continued to improve significantly over
version 6.5 but remains incomplete. Our initial support of modules (completion
date not yet known) will allow the consumption of Microsoft IFC module files.

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
them. 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 currently consumes files
produced by a pre-release version of the Microsoft compiler (19.37.32722.95
for x86, IFC version 0.43, microsoft_version >= 1936). The front end issues an
error if the IFC file has a version newer than the supported version. Versions
0.33, 0.41, and 0.42 are also accepted by the front end, but their use is not
recommended.

As part of the evolving implementation of support for importing IFC module
files, version 6.6 contains a new header file, ifc_modules_spec.h.

Starting with version 6.0, the front end must be compiled as C++ code. The
minimum compiler versions are unchanged from version 6.5:

        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 use only the C subset of the C++ standard library, so if your code uses the
C++ standard library you don't have to worry about possible
collisions between incompatible versions.

As usual, we have fixed bugs, added many minor features, and continued to
improve our various compatibility modes. Full details are found in the
Changes_6.6 file (approximately 2800 lines).
