https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116077
Bug ID: 116077 Summary: GCC hasn't implemented CWG DR 2387 Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: de34 at live dot cn Target Milestone: --- CWG 2387 (https://cplusplus.github.io/CWG/issues/2387.html), which makes const variable templates has external linkage by default, is not implemented by GCC yet. As shown in https://wandbox.org/permlink/bVfvGTlfwJ9IQll7 (switch to Clang to see the correct results): common.h: ``` template<typename> constexpr int non_inline{}; template<typename> inline constexpr int inlined{}; ``` other.cpp ``` #include "common.h" #include <iostream> void other_inlined() { std::cout << " other: " << &inlined<int> << '\n'; } void other_non_inline() { std::cout << " other: " << &non_inline<int> << '\n'; } ``` main.cpp ``` #include "common.h" #include <iostream> void other_inlined(); void other_non_inline(); int main() { std::cout << "non-inline:\n"; std::cout << " main: " << &non_inline<int> << '\n'; other_non_inline(); std::cout << "inlined:\n"; std::cout << " main: " << &inlined<int> << '\n'; other_inlined(); } ```