You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
0.7.1: nothing in the package instantiates std::filesystem::path's iterator (#18)
* rules-slang: normalise a per_file key without std::filesystem::path
MSVC 14.52 (both 36629 and 36725, measured on xrgui's CI) refuses to
instantiate _Path_iterator's hidden-friend operator== inside a module
interface unit that imports std:
include\filesystem(1572): error C2801: '..._Path_iterator<...>::operator =='
must be a non-static member
lexically_normal() was the one call 0.7.0 added that reaches it. The key
needs two normalisations, separators and a leading ./, and both are string
operations.
* a member does not instantiate the path iterator; relative_to() is the string form, in the lib root
The first fix removed lexically_normal() and the error stayed. The lib root
compiles lexically_relative and passes; a member that imports the lib root
and reaches _Path_iterator's hidden-friend operator== again fails under
MSVC 14.52 (36629 and 36725, xrgui CI). So members do not: the Slang rule's
sidecar name and the AppImage member's launcher path go through one string
helper, mcpp::plugins::names::relative_to.
* the lib root reads paths apart as strings; its BMI no longer carries _Path_iterator
Removing the iterator-instantiating calls from the members changed nothing:
the rule failed with the same C2801 with nothing but create_directories and
path construction left, while declare.cppm -- same import set, no
std::filesystem use at all -- compiled. What every failure shared was
importing both std and mcpp.plugins, whose BMI carried _Path_iterator
instantiated by common_base_dir / namespace_of, and then touching path.
components() splits on both separators, which is the component comparison
0.5.2 introduced lexically_relative for; nothing in the lib root instantiates
the iterator now. create_directories stays: the STL walks wchar_t pointers
there, not the iterator.
* 0.7.1: nothing in the package instantiates std::filesystem::path's iterator
MSVC 14.52 (36629 and 36725, xrgui CI) refuses the STL's own hidden-friend
_Path_iterator::operator== in any module that imports both std and a module
whose BMI already carries that instantiation. The three commits before this
one found the shape by elimination; this one is the version that carries it.
Copy file name to clipboardExpand all lines: mcpp.toml
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
[package]
2
2
name = "plugins"
3
3
namespace = "mcpp"
4
-
version = "0.7.0"
4
+
version = "0.7.1"
5
5
description = "Official mcpp build plugins: rule packages under mcpp.rules.*, build-time utilities under mcpp.tools.*, each member selected by a feature"
0 commit comments