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

Reply via email to