https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116364
Bug ID: 116364
Summary: [modules] GM explicit specialisation not propagated
from partition
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nshead at gcc dot gnu.org
Blocks: 103524
Target Milestone: ---
Consider the following:
// a.cpp
module;
template <typename> struct S {};
template<> struct S<int> { static constexpr bool value = true; };
export module foo:part;
export template <typename T> constexpr bool result = S<T>::value;
// b.cpp
export module foo;
export import :part;
// c.cpp
import foo;
bool x = result<int>;
Doing 'g++ -fmodules-ts -Wno-global-module -S [abc].cpp' gives:
In file included from b.cpp:2:8,
of module foo, imported at c.cpp:1:
a.cpp: In instantiation of ‘constexpr const bool result@foo<int>’:
c.cpp:2:10: required from here
2 | bool x = result<int>;
| ^~~~~~~~~~~
a.cpp:5:62: error: ‘value’ is not a member of ‘S@foo<int>’
5 | export template <typename T> constexpr bool result = S<T>::value;
| ^~~~~
Doing the instantiation within 'b.cpp' works successfully; it looks like
explicit specialisations are not correctly being propagated through partitions.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103524
[Bug 103524] [meta-bug] modules issue