-
Notifications
You must be signed in to change notification settings - Fork 269
Fix: using statement in another namespace that pointer to type alias#1329
Fix: using statement in another namespace that pointer to type alias #1329HungMingWu wants to merge 1 commit into
Conversation
hsutter
commented
Nov 2, 2024
Thanks for your pull request! This is your first PR since the project has permanently switched to a standard commercial OSS license, and I've emailed you the new Contributor License Agreement (CLA), which will cover this and all your future contributions. Once it's completed I can look at your PR. For more details see #1322 .
hsutter
commented
Nov 3, 2024
Thanks!
I am not able to make progress evaluating this because it seems to need testing...
- Test self-build by:
a) Buildingcppfront.cppas usual which builds from the Cpp1 sources
b) Using thatcppfront.exeto buildreflect.h2andcpp2regex.h2(this should result in no surprising diffs) -- see themainbranch'sbuild_h2.bat
c) Buildingcppfront.cppagain (this should work) - Test generating regression tests by:
a) Building the Cpp2 tests into Cpp1 tests -- go toregression-tests/test-resultsand then runrun-tests.bat
b) Build the resulting Cpp1 tests using at least one compiler -- go toregression-tests/test-results/<your preferred configuation>and then run that directory'srun-tests-...(a.bator a.sh)
I'm currently getting failures at 1(c). I've just committed the results of 1(b) for reference.
HungMingWu
commented
Nov 3, 2024
Seems the main branch have modified on my previous code base commit, I will fix it later.
HungMingWu
commented
Nov 3, 2024
I find the root cause
Here is the example
namespace A { template<bool> struct t { }; constexpr bool f(const t<true>&) { return true; } constexpr t<true> o{}; } // namespace ns A : namespace = { t1: <_: t<o.f()>> type == bool; } B : namespace = { using A::t1; } int main() { return 0; }
From main branch, it would become
#line 9 "test.cpp2" namespace A { } namespace B { using A::t1; } //=== Cpp2 type definitions and function declarations =========================== #line 1 "test.cpp2" namespace A { template<bool> struct t { }; constexpr bool f(const t<true>&) { return true; } constexpr t<true> o{}; } // namespace ns
t1 is aliases from stage1, but my code will become
#line 9 "test.cpp2" namespace A { template<t<CPP2_UFCS_NONLOCAL(f)(o)> UnnamedTypeParam1_1> using t1 = bool; } namespace B { using A::t1; } //=== Cpp2 type definitions and function declarations =========================== #line 1 "test.cpp2" namespace A { template<bool> struct t { }; constexpr bool f(const t<true>&) { return true; } constexpr t<true> o{}; } // namespace ns
Looks it needs to move cpp1 namespace definition before stage0.
9421d21 to
0f3914e
Compare
Reopen PR #1286