2
0
mirror of https://github.com/boostorg/spirit.git synced 2026-01-19 04:42:11 +00:00
Nana Sakisaka c64a9146fc Use concepts for attribute category overload resolution (#812)
* Use concepts for attribute category overload resolution

`x3::traits::move_to`: Dump tag dispatching and use concepts for
overload resolution. This drastically improves compilation speed and
prints significantly concise errors on ill-formed programs, thanks to
the reduced nesting level on the entire control flow of X3. Also
partially (but not yet completely) improves #346 due to reduced MPL usage.

`x3::detail::parse_into_container`: Ditto.

`support/traits/optional_traits.hpp`:
  `BOOST_SPIRIT_X3_USE_BOOST_OPTIONAL`: new macro.
  Default to `boost::optional` unless above macro is defined as `0`. Implements
  `std::optional` handling regardless of the value; fixes #270.
  Note that most test suites are intentionally not defining above macro as `1` 
  (yet) to make sure the change does not break existing codes.

`x3::optional`: Ideally this should've split into a separate PR, but the
new attribute category handling requires the overhaul on this.

`core/proxy.hpp`: Removed. `x3::optional` was the only derived parser
which used this feature for years. We shouldn't support any overly
generic 'core' features whose extandable use case is unknown even to the
core components.

`extract_int`, etc.: Adjusted to properly "move" the local attribute
variable before passing it to `x3::traits::move_to`.

`char_parser`: Ditto, but this constructs temporary value instead of
applying `std::as_const`. Const references are costly for primitive type
like `Char` thus prvalue should be constructed here.

tests: No semantic changes intended. All changes exists solely for
adapting to the new attribute category handling (implementation details.)

* Fix incorrect `noexcept` specification

* Compensate for potential GCC bug on constraint satisfaction

It turns out that GCC 14 does not like the form below, resulting
in silently defining the flipped value (!) without raising any sort of
hard/soft errors in well-formed code.

```
struct S : std::bool_constant<requires(...) { ... }> {};
```

* Use the correct path to retrieve action cache

<638ed79f9d/restore (ensuring-proper-restores-and-save-happen-across-the-actions)>
> It is very important to use the same key and path that were used by either actions/cache or actions/cache/save while saving the cache.
2025-09-07 04:55:57 +09:00
2024-08-08 23:15:28 -05:00
2025-09-05 02:03:07 +09:00
2025-09-05 01:32:08 +09:00
2023-03-19 04:48:51 +03:00
2008-04-13 03:02:30 +00:00
2025-09-05 13:50:37 +09:00
2019-12-27 21:49:15 -05:00

Spirit Build Status

Spirit is a set of C++ libraries for parsing and output generation implemented as Domain Specific Embedded Languages (DSEL) using Expression templates and Template Meta-Programming. The Spirit libraries enable a target grammar to be written exclusively in C++. Inline grammar specifications can mix freely with other C++ code and, thanks to the generative power of C++ templates, are immediately executable.

Spirit.X3 (3rd generation)

Documentation

The newest Spirit shines faster compile times. Currently only a parser framework (no serialization support).

Supported environments

  • C++23 and C++26
  • GCC 14
  • Clang 22
  • MSVC (2022)

Spirit V2 (2nd generation)

Documentation

The latest Long Term Support version of Spirit. A Swiss Army knife for data manipulation on any kind of input.

Note: Spirit V2 is no longer actively maintained. For new projects, use X3.

Consists of:

  • Qi: Parser framework.
  • Karma: Generator framework.
  • Lex: Lexical analyzer framework.

Supported environments

Spirit.Classic (1st generation)

Documentation

An elderling member of Spirit. It receives only limited maintenance, but it is still used even inside Boost by Boost.Serialization and Boost.Wave libraries. It also contains Phoenix V1.

Spirit.Classic should support even ancient compilers.

Brief History

Date Boost Commit Event
2014-03-18 1.56 8a353328 Spirit.X3 is added
2013-12-14 1.56 c0537c82 Phoenix V2 is retired
2011-03-28 1.47 400a764d Phoenix V3 support added to Spirit V2
2009-04-30 1.41 5963a395 Spirit.Repository is appeared
2008-04-13 1.36 ffd0cc10 Spirit V2 (Qi, Karma, Lex, Phoenix V2) is added
2006-08-23 1.35 2dc892b4 Fusion V1 is retired
2003-01-31 1.30 81907916 Spirit is the part of the Boost
Description
Mirrored via gitea-mirror
Readme 114 MiB
Languages
C++ 87.6%
HTML 12.3%