<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/128840>128840</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clangd false positive redefinition error of type traits template when #include <print> after import with type_traits include
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            false-positive
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          FalcoGer
      </td>
    </tr>
</table>

<pre>
    So when I define such a module

```cpp
// Math.cppm
module;

#include <cmath>
#include <type_traits>
#include <utility>

export module Math;

export template <typename T>
    requires std::is_arithmetic_v<T>
auto add(const T& lhs, const T& rhs)
{
    return lhs + rhs;
}

```

and try to use it

```cpp
#include <print>
import Math;

auto main() -> int
{
    std::println("{}", add(2.0F, 1.0F));
}
```

it works fine.

When I switch `#include <print>` and `import Math;`, it still compiles fine and gives the same results. But clangd explodes in my face telling me that it's not fine with

```text
Too many errors emitted, stopping now (clang fatal_too_many_errors)

In included file: type alias template redefinition with different types ('__is_one_of<[6 * ...], (no argument)>' vs '__is_one_of<[6 * ...], __int128>')

Related information:

  * type_traits#808,11: Error occurred here
  * type_traits#808,11: Previous definition is here

 (clang redefinition_different_typedef)

```

Compiled against libstdc++ from gcc 15.0.1.

```text
$ clang --version
Ubuntu clang version 21.0.0 (++20250224081945+0770afb88ec1-1~exp1~20250224082103.749)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
```

`.clangd`:
```yaml
CompileFlags:
  Add: 
 - -fprebuilt-module-path=build/CMakeFiles/MathModule.dir
```

Built with cmake
`CMakeLists.txt`:

```cmake
cmake_minimum_required(VERSION 3.28)

project(TemplateModulesTest)

# REF: selecting-a-specific-libstdc-version-with-clang
# https://stackoverflow.com/a/50964601/10263660

set(GCC_TOOLCHAIN_PATH "/usr/local/gcc/15.0.1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --gcc-toolchain=${GCC_TOOLCHAIN_PATH}")

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED YES)

add_library(MathModule)
target_sources(MathModule
  PUBLIC
 FILE_SET cxx_modules TYPE CXX_MODULES FILES
 Math.cppm
)

set_target_properties(MathModule PROPERTIES CXX_SCAN_FOR_MODULES YES)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE MathModule)
```

Building first is required for clangd to find the module and not freak out about it not existing.

```bash
mkdir build
cmake -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -G Ninja ..
ninja
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykV9uO8jgSfhpzU0oUHI4XXARI_kHbpwX-2ZmryDgOeNqJs7bTTd_Ms6_KCTR9GM1KIyFI7Dp-_qrKMGvlsRZiQcZLMl4PWOtO2iwyprj-IczgoIu3xU7D60nUsIFClLIWYFt-AgaVLlolSJTgZxJ1H940-EozQjO4Z-4U8qapSJT00vGyV6CxrLlqCwEkXvGKuROJ0y8b7q0RuTNMOvvdduukku6t34oScW60cX1k3v3VYb_lRNUo5q7Ga1YJ2HcGAACM-G8rjbBgXUHihMSJtDkz0p0q4STPX0i86sVZ6zSwoiB0xnVtHewJnYA6WUJXcLNicGWOUUyXVy-uNTXKAqFLL9HFOV1_wrN7ZXUBzryB09BaAdL9Beq32DRG1q6LVFY-9w94-OgrJmtCZ4TOISBxCqhxG-cVBG9MdbIU96drfKCrHgAaRhm-Df3vHD-3CX3MRjp41ebZArIp7Nb-0zHMvkrHT4Ci3ycziQDBIJPoU1KosQLpwDqpFHBdNVKJzodXOcoXYcGdBFg8cyNsq5wNYdk64IrVxwLEuVG6EBZkDdUblIwLcEIpWR-hEuBOzCH2dGqh1q4z_Srd6dNpOHFGGPcaAa7fQBijjQVRSedEgWFap5sGrdb6FZA_6B9K5pjKndY5quWdWk-dKNnU0ANSQCmxlBJABgNTktl3Yhvhy1Q6qWsfHRSyLIURtfPySLkZodM8lzbXtch1SeIVGS8nQGgCYRiS8RqDJHRWa2Dm2Faidv5IU0Kn8IIW_l49z2XthnTWaV3T2AqMsgBZl9pUDKNEivk98CZua57Gs2hG6Go4xHRTRAQ0560xooCTMOL_0Hoy4kXq1sINLtJetNHA9QRuscuvsOVouxDlNYdPfF51XCuAHZnEslfyYF3BCV1idZdGV3DkHIbjMAqH4fdsIXTU0RCC4EUYi7hEyc9DW7u23-iXgQ7DKIy6Y0QPNKLjiNJRNBvOR2NCl9F0GrHyMJsJPgyGf4pzM_zzXYgOozicjuZdOntmjsIhTufZJJ-MgoYHStbtOTjWLe6fjGAFtlShUKrRVp49Ha1jSoliLQ2uE5q11hCaKXnAb_VSBXRIaHaQ9VfIyCQKu6LDpfgDIG-sUu-oZoodbScBkBSF9xUlEEBQNkYcWqlc0DX8oPG9YI1rBaHZ6p49iwy7AKEZ9ol7LxYW0nyNaImGunrhFXsWnYQ3cSets6E7u_dYb3tvL-1_80rWsmqrvJ8j2Bt_Tbe7zeMDxKHvtJ16Y_QfgjtCZ_u-cLvg7F5Y9040GsM2zTBnK5TgTtbHgAW2EVyWEg_KE-1CmADDDzyuvfLJucaj5weydYw_6xdhSqVfQ64rQjNGaDaO5pPRJMLTGkZ0Ek8uoFiBEf5YrfL94-Pd6pdk85A_JftfwDf_y4FrzhSh2ZFzNOBJ7vfnVwur--Rfab767bc8u0t-7Dr1EZkuP22Q6RqC4Mh54LRW_ITjKV53ol-juAyhL37-wss_9fFNOrt98rBOtmug8ff5XgTybfrvn5ttuobf093VHCuKXMmDYeaN0Nk7RTsB50szt7o1HDl8K4DV8PRzebdZ4WO2uUvzXboHfj7nXTFY2P_-lALGcP-4_nmX7rzUDsVv72W3qeW9x8boRhgnPzmFp-3jU7rdb9Kdt7tbJQ959ri9OvicmjgL3jp2wIRmeNfwFw70_CFBJevnHobOpRd92m5-TfYpfEblm7otcJSW0liHjf1SelBqc5nsTuO0Lvz472-HeCfwU9wI9gy6dcAO-C2dXxZnabHcPrfrA7M476vnQhroOk1f-xCsL0RbPd4_be7SrSdWXybYB2nWt_j1O0P-RrYfIsEPeJD1HwxCDKjGx9uoBsUiLubxnA3EYjgdRePxZEzjwWlBx_F8yoqIT8aTGRecllE8p3wacTYti6EYyEU_GSbRdDymcTgvojKaTqZzOiom8_mBjCJRMalCbOmhNseBtLYViyGdzUbRQLGDUNb_gaC0ZMqKAEeEky8CC2e8HpiFHwaH9mjJKFK-mV5tOemUWPSn5NXhov7xJiO62V92d55u0L9fevwflO-vjMBKJwz010Xf4G_uCpc71aA1avGxWx6lO7WHvk1iwJexdu3dmUcCp0sPxsuC_i8AAP__8j8SEw">