fix: resolve recursive alias error in Value formatter #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
From: Azalea Client Contributors
Subject: [PATCH] Fix MSVC C2968 recursive alias declaration error with fmt formatter
Description
Problem
When compiling with MSVC (tested with VS2022 v17.x) and fmt v11.x, the
fmt::formatter<rift::Value>specialization fails to compile witherror C2968: 'mapped_type_constant<rift::Value,fmt::v11::context>': recursive alias declarationThis occurs because
rift::Valueis a recursive type (containsArrayandObjectwhich holdValues), and the formatter's use offmt::join()and nestedfmt::format_to()triggers fmt's type mapping system during formatter instantiation.Solution
Replace
fmt::join()and nested value formatting with a private helper method that manually iterates and formats elements. This avoids triggering fmt'smapped_type_constantmachinery while the formatter is being instantiated.Changes
format_value()helper template methodfmt::join()for arraysTesting
Related