<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/130057>130057</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[C++20][Modules] Compile Error with static template function.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jaehyuck0103
</td>
</tr>
</table>
<pre>
Hello. LLVM.
I encountered an incomprehensible compilation error related to a static template function while using C++ modules.
I provide the minimal code below to reproduce the issue.
It's my first bug report to LLVM. Please let me know if there's anything wrong.
#### Environment
Ubuntu clang version 21.0.0 (++20250305083430+f4878cb91612-1~exp1~20250305083603.767)
Target: x86_64-pc-linux-gnu
#### Codes
``` c++
// main.cpp
#include "dummy_cuda_runtime.h"
#include <cstdint>
import MyModule;
int main() {
uint16_t *buffer;
cudaMalloc(&buffer, 100 * sizeof(uint16_t)); // No Compile Error
MyClass aaa;
cudaMalloc(&buffer, 100 * sizeof(uint16_t)); // Compile Error
}
```
``` c++
// a.cppm
module;
#include "dummy_cuda_runtime.h"
#include <cstdint>
export module MyModule;
export class MyClass {
public:
MyClass() {
// If below line is not in constructor, No Compile Error
cudaMalloc(&buffer_, 100 * sizeof(uint16_t));
}
uint16_t *buffer_;
};
```
``` c++
// dummy_cuda_runtime.h
template <class T> static void cudaMalloc(T **devPtr, int size) {
// dummy
}
```
```
# CMakeLists.txt
cmake_minimum_required(VERSION 3.30)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
project(modules-example)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 20)
add_executable(demo main.cpp)
target_sources(demo PUBLIC FILE_SET all_my_modules TYPE CXX_MODULES FILES
a.cppm)
```
``` shell
mkdir build
cd build
cmake .. -G Ninja
ninja
```
``` terminal
FAILED: CMakeFiles/demo.dir/main.cpp.o
/usr/lib/llvm-21/bin/clang++ -std=gnu++20 -MD -MT CMakeFiles/demo.dir/main.cpp.o -MF CMakeFiles/demo.dir/main.cpp.o.d @CMakeFiles/demo.dir/main.cpp.o.modmap -o CMakeFiles/demo.dir/main.cpp.o -c /home/jae/Projects/cpp_modules3/main.cpp
/home/jae/Projects/cpp_modules3/main.cpp:15:5: error: no matching function for call to 'cudaMalloc'
15 | cudaMalloc(&buffer, 100 * sizeof(uint16_t)); // Compile Error
| ^~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVklv67oV_jX05sCCRFkeFl7IUxs0ToIb34d0ZVDSsc2EIlUOSdzF_e0FKdlxeh00xXuCB4k68_fx8DBj-F4iTkk2I9mix5w9KD19Zng4uvIlTuK0V6jqOP07CqEiuL39Yx2ROCdxfgMoS-WkRY0VMAlclqpuNB5QGl4IBP_IBbNcSUCtlQaNglmswCpgYCyzvASLdeNXYedkGWTfDlwgOMPlHuaEzgidQa0qJ9BEwXGj1SuvEOwBoeaS10xAqSqEAoV689Y1NlpVrmxluDEOg6oldGSgPsKOa2OhcHsvqrT1SiE5eBDIDIJACzXCi1RvwHfejMagzOTRHnxob1rJfVcMQtPzB5bylWsla5SWxPnPwknroBRM7uEVtfEp0iSKoxgIHbf50ZhmcRpn8TgdpDGhs91gPBqXxSQZJrSf_ML3Jvl1ITSM02g0HBE6IXG-YXqPlqQ5vI-H2-Gg35R9waV77--luxLfXFVo_OIwbj9QtlEEwRWhK6gZl1HZNK0ql6VwFQKhtHJ1fdyWrmJb7aTlNUYHQul_yaXz0tiKS0vSZRsAr0OV18d1AJKks25d2uAsVGICZNStAwA4Lm0y3FogNC_cboe6VfPvfARrJoQqg-awe0_nkMS-rjkY_m9UO0LHJzO-WHRC0hlAl-WdgnngKMLS8_PD9fo4F8wYYIydQ_1rfP7mcLS4hKKD62tkmIelJnFefy7kXwMTvgeYWtu_o9W9LkNtTjW6wKxxheAlScNT9_4TstBdXTI3u27LCi79NgWpLHAJpZLGaldaFcp7BaeToeuYbL8HSmengyDOrzBu2-U-WnQ33wbqKgRxfm53vvqhfhuSLk_N8FXx6nNOGx8LoXmFrw82VMNvGZ_T56peev2ftGp5APM1e8FbbqyJ7LvvVWXNXnAbWqqrtxr_5bjGitDxH8sfjzf3d5BGvjtNWnMGLaHj-Tr_x3I7387v1w83t8sfbadrhT5JPD39JhMqdjLXaPWMpVfomn0f31ndCLzqcPn0cP9jc7Lo_9f53eIR7u-ux_f0tH3c5HeL_McC6EcOrKq2-I6ls6zwnsYV1uqj_QUxG_rr1iinSzQnmYefs9ubOay898flBpgQ2_q47WKHzT8fluC9ru8XP2-Xj0Hw8YK5V65ub7exfUU0c0Ah_P5_qbiGwnFReeSqj1sPIkQR9P8Gd1w-MxLnsvv_0qpFXXPJvOFVfnO7XPjjJPBjxYVPeuWTjiquCV2dyhOplu7O-FXBC_8rXus-TQhdFb6rry6QBoC-sRVJF_5c6s496K8X0F9vvuEM-uvVN8SiCsgg_oZcraqaNdBX3_Jd-i12UDUSunpm_vehJazXKZvmhHx6odeW5_9VSvMkI2nuv-3c5G-kZ6Utw-RxnpR2SkPJhPDTC6Gjy8YxaqmWZEBG8z93dH1xcnWdfDQHki1_nS4S50k37e1RovbzXnRmYJq3NAVjVdNg5ReMK0pV10xWsGNctOJnZvaqaVpN0gnr4TQZDRKajbNB1jtMBxQndJjEaTpEVo3HlO1YPBjsJjimkxHSHp92A9MwibNskEVFRkuKKStSZINkNCGDGGvGReQ5Gym974VBcZqkcZyNeoIVKEyYjCmV-NaOkf4UzRY9PQ1EL9zekEEsQg89m7HcijBSz08sJ9mCZLP2NDUkW3wuJrxxe_hyHo56TovpwdrG-JM1gLHn9uCKqFR1t-VOO-_cRFchWk-zLp3XKf1PAAAA__9ZXJXA">