https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115720

            Bug ID: 115720
           Summary: module symbol collision
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: unlvsur at live dot com
  Target Milestone: ---

//mymodule.cppm
module;
#include<cstdint>
#include<type_traits>
export module mymodule;

export namespace test
{
enum class dll_mode: ::std::uint_least32_t
{};

inline constexpr dll_mode operator&=(dll_mode x, dll_mode y) noexcept
{
        using utype = typename ::std::underlying_type<dll_mode>::type;
        return static_cast<dll_mode>(static_cast<utype>(x) &
static_cast<utype>(y));
}
}


//main.cc
import mymodule;
#include<type_traits>
int main(){}

g++ -c mymodule.cppm -Ofast -std=c++26 -fmodules-ts
g++ -o main main.cc mymodule.o -Ofast -std=c++26 -fmodules-ts
In file included from main.cc:2:
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2511:42:
error: default argument for template parameter for class enclosing 'using
std::__underlying_type_impl<_Tp, <anonymous> >::type = __underlying_type(_Tp)'
 2511 |       using type = __underlying_type(_Tp);
      |                                          ^
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2511:42:
error: template definition of non-template 'using
std::__underlying_type_impl<_Tp, <anonymous> >::type = __underlying_type(_Tp)'
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2515:12:
error: redefinition of
struct std::__underlying_type_impl<_Tp, false>'
 2515 |     struct __underlying_type_impl<_Tp, false>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from mymodule.cppm:3,
of module mymodule, imported at main.cc:1:
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2515:12:
note: previous definition of 'struct std::__underlying_type_impl<_Tp, false>'
 2515 |     struct __underlying_type_impl<_Tp, false>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2522:40:
error: wrong number of template arguments (1, should be 2)
 2522 |     : public __underlying_type_impl<_Tp>
      |                                        ^
D:/toolchains/gnu/x86_64-w64-mingw32/x86_64-w64-mingw32/include/c++/15.0.0/type_traits:2509:12:
note: provided for 'template<class _Tp, bool <anonymous> > struct
std::__underlying_type_impl'
 2509 |     struct __underlying_type_impl
      |            ^~~~~~~~~~~~~~~~~~~~~~

Reply via email to