https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106825
--- Comment #2 from Mark Millard <markmigm at gmail dot com> ---
An tiny example that avoids all involvement of libstdc++ is (showing
g++12 from FreeBSD in the comments, instead of c++ for fedora
--but both contexts fail):
# more module_template_specialization_failure.cppm
// g++12 -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -xc++-system-header
memory
// g++12 -std=c++20 -fmodules-ts -g -fPIC -xc++ -c
module_template_specialization_failure.cppm
export module module_template_specialization_intf;
export template<int c> int test();
export template<> int test<0>() { return -1; };
export template<> int test<1>() { return -2; };
# more module_template_specialization_failure.cpp
// g++12 -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -xc++-system-header
memory
// g++12 -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -fPIC -c
-xc++ module_template_specialization_failure.cppm
// g++12 -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -fPIC
-omain_using_plugin module_template_specialization_failure.cpp
import module_template_specialization_intf;
int main()
{
return test<0>()-test<1>();
}
The sequence and result is:
# c++ -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -xc++-system-header
memory
# c++ -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -fPIC -c -xc++
module_template_specialization_failure.cppm
# c++ -std=c++20 -pedantic -Wall -Wextra -fmodules-ts -fPIC -omain_using_plugin
module_template_specialization_failure.cpp
/usr/bin/ld: /tmp/ccmyKNjk.o: in function `main':
module_template_specialization_failure.cpp:(.text+0xc): undefined reference to
`_ZW35module_template_specialization_intf4testILi0EEiv'
/usr/bin/ld: module_template_specialization_failure.cpp:(.text+0x14): undefined
reference to `_ZW35module_template_specialization_intf4testILi1EEiv'
/usr/bin/ld: /tmp/ccmyKNjk.o: in function
`_GLOBAL__sub_I_module_template_specialization_failure.cpp':
module_template_specialization_failure.cpp:(.text+0x30): undefined reference to
`_ZGIW35module_template_specialization_intf'
collect2: error: ld returned 1 exit status