<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">