<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62071>62071</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Nonsensical compilation, random errors in C++ modules 20
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ar-visions
</td>
</tr>
</table>
<pre>
I cannot use this compiler. What I'm noticing is you cant implement a simple lambda without having to resort to random hacks to get the compiler to not delete default constructors.
Can't use gcc either because it doesnt have aarch64 on mac. Utterly stuck, and it means write a transpiler or goto rust (same as everyone else).
a.cppm
```
module;
#include <cstdlib>
#include <cstdio>
#include <cstdarg>
#include <new>
#include <memory>
export module a;
export template<typename T>
class func;
export template<typename R, typename... Args>
class func<R(Args...)> {
public:
func() { };
template<typename F>
func(F&& func) : impl_(new Impl<typename std::decay<F>::type>(std::forward<F>(func))) {}
R operator()(Args... args) const {
if (impl_)
return impl_->call(args...);
throw std::runtime_error("Empty func object");
}
explicit operator bool() const {
return static_cast<bool>(impl_);
}
private:
struct Base {
virtual ~Base() { };
virtual R call(Args... args) const = 0;
};
template<typename F>
struct Impl : Base {
explicit Impl(F&& func) : func_(std::forward<F>(func)) {}
R call(Args... args) const override {
return func_(args...);
}
F func_;
};
std::unique_ptr<Base> impl_ = nullptr;
};
// compiles ONLY when this line is uncommented. its not even used
// -----------> Broken <------------
// func<void()> abc2 = func<void()>([]() -> void { });
export int foo() {
return 43;
}
```
b.cppm:
```
export module b;
import a;
export int bar() {
return 43;
}
```
CMakeLists.txt:
```
cmake_minimum_required(VERSION 3.26)
project(two_libraries CXX C ASM)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
include(../cxx_modules_rules_clang.cmake)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(a STATIC)
target_sources(a
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES FILES
a.cppm
)
add_library(b STATIC)
target_sources(b
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES FILES
b.cppm
)
# The compiler won't find module 'a' if we delete the following line.
target_link_libraries(b PUBLIC a)
add_executable(main main.cpp)
target_link_libraries(main PUBLIC a b)
```
main.cpp:
```
import a;
import b;
int main() {
foo();
bar();
func<void()> abc3 = func<void()>([]() -> void { });
abc3();
return 0;
}
```
build log with abc2 commented out:
```
kalen@Kalens-Mac-mini build % ninja
[8/10] Building CXX object CMakeFiles/main.dir/main.cpp.o
FAILED: CMakeFiles/main.dir/main.cpp.o
/Users/kalen/Dropbox/src/llvm-project/build/bin/clang++ -std=c++20 -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk -MD -MT CMakeFiles/main.dir/main.cpp.o -MF CMakeFiles/main.dir/main.cpp.o.d @CMakeFiles/main.dir/main.cpp.o.modmap -o CMakeFiles/main.dir/main.cpp.o -c /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp
In file included from /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:2:
/Users/kalen/src/CMake-Modules-Examples/two_static_libraries/a.cppm:20:22: error: no matching constructor for initialization of 'std::unique_ptr<Base>'
func(F&& func) : impl_(new Impl<typename std::decay<F>::type>(std::forward<F>(func))) {}
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:25: note: in instantiation of function template specialization 'func<void ()>::func<(lambda at /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:38)>' requested here
func<void()> abc3 = func<void()>([]() -> void { });
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:121:59: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'Impl<typename std::decay<(lambda at /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:38)>::type> *' (aka 'Impl<(lambda at /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:38)> *') to 'const unique_ptr<Base>' for 1st argument
class _LIBCPP_UNIQUE_PTR_TRIVIAL_ABI _LIBCPP_TEMPLATE_VIS unique_ptr {
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:185:21: note: candidate template ignored: requirement 'is_default_constructible<std::default_delete<func<void ()>::Base>>::value' was not satisfied [with _Dummy = true]
_LIBCPP_CONSTEXPR unique_ptr(nullptr_t) _NOEXCEPT : __ptr_(pointer(), __default_init_tag()) {}
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:190:12: note: candidate template ignored: requirement 'is_default_constructible<std::default_delete<func<void ()>::Base>>::value' was not satisfied [with _Dummy = true]
explicit unique_ptr(pointer __p) _NOEXCEPT : __ptr_(__p, __default_init_tag()) {}
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:222:3: note: candidate template ignored: could not match 'unique_ptr<_Up, _Ep>' against 'Impl<typename std::decay<(lambda at /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:38)>::type> *' (aka 'Impl<(lambda at /Users/kalen/src/CMake-Modules-Examples/two_static_libraries/main.cpp:9:38)> *')
unique_ptr(unique_ptr<_Up, _Ep>&& __u) _NOEXCEPT
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:180:21: note: candidate constructor template not viable: requires 0 arguments, but 1 was provided
_LIBCPP_CONSTEXPR unique_ptr() _NOEXCEPT : __ptr_(pointer(), __default_init_tag()) {}
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:195:3: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided
unique_ptr(pointer __p, _LValRefType<_Dummy> __d) _NOEXCEPT
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:201:3: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided
unique_ptr(pointer __p, _GoodRValRefType<_Dummy> __d) _NOEXCEPT
^
/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:210:3: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided
```
when its not commented, it works.
theres nothing else i can say. i've been waiting years for clang to do somethign with c++ modules and it seems absolutely unusable. its obviously not actively maintained by people who want to see C++ modules succeed. We're left to use Rust if we want a modular compilation process and I thought in 2023 there would be something of support here. But gcc doesnt support aarch64 M1/M2 with modules and this thing just has random errors in every single facet of C++. new T(args) is broken, it tells you to use include <new> but that doesnt fix it. As is, its a waste of time to proceed with clang
Please don't say its experimental, say its intentionally broken because its been long enough to warrant that. I can't EXPERIMENT with it at all. It cant DO anything.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1z6jbz_zTKzQ4MyCHARS4IL_9hmrcScppeeWRbgBpZciUZwv-in_2ZlV9wEshJn56eOe08TIZga73aN_12tRazVqwV55ekd0V6kzOWu402l8y0tsIKrexZpJP95RxippR2kFsObiMsxDrNhOSmDfDLhjmYE9pPQWknYqHWICzsdY5PORBpJnnKlQMG1l-AZGmUMNgJt9G5gw3b4kNOg-FWG-d_MZXoFDYsfrZ4veYO3IbXE-M9lCjhkjsOCV-xXDqItbLO5LHTxraBdCakMyq-x0wR2i9UWMcxcOE23EDEY4a3hINEc6u8NBwYM_Hm4hy0gpTFbYBH57iRe7Auj58JHQNTCT6UcqYs7IxwHBg4w5Qt5NMG1hoVya0DQgeWpRyYBb7lZq8VBy4tJ3TYbgrJ2nGWpeWdi0755y9TneSSk-CqSU9oIFQs84QDCcaxdYkUEQmmp0aF_mCQmfWJUcV3J0ZSnmqzPwz6b_6SoRcLiYG9kbkcdTzNJHOcBGO3z7hC8yxrRrFk1sIqV_Hnn16gW6qrdrsNI7O2RzmOF4QOcLTdbhM6JMEUSL-cJssjKWISlPMBQPEQHRA6RDIg_ckboZDomESzevYGmxmhF4RelJdDIMHIr5GQ0IHiO5inmWwysS5BaYJRwmO2J8HYc_V3kAYv6KAmWmmzYyapyOignKb482r2J29lX4DOuGFOm0LNg3WAoQ3psFhYBytB-RErjO1S_OHrMfwY7nKjCv1aJJjGTEpCB6xh-zcc3cbo3UFpkysnUh5yY0rp6DTN3N6bD3T0G48dofQtpyNK8pdMili4WleItJalX9-qV8ptHXMiDmNmHQnGnt4btVb4gzkzI7Y-HhoyFNgEV8zy97bcCuNyJuEPHD4Rb29pF1Ba9IS_ggl03gn53wRvKTkGp4_Y4yrUNvZBfDzW8Xf4yZA9Ea9FzH6oud5yY0RyRMZGWFaifBCOJ2aflc9-xbS1jrkSv-c8zJwhwdj7N5gWq8L7SOVS-rHq8XesCJ0ROqvSn4W72-tfYbfhqsjHUiiOWTdXsU4x2fKkDSCc9UmSb7nCxJe84tU6fFCaK6OfuUJQbzVHmk-U6LnVIimBIpgCi2LqlTg2ij98aVHGs58JKerIbtj8FcIL5WCl9WEdHAxdeu88eGWvY0mz-I6KrFotxDc0r7NVVPMUqb9_SF8NwSJmvoVg4xv2zK-FdbbtXtwpAeOUPfMwFUqkeRoa_nsuDEcTf5kuHuZ3txC0cZUNK9jRBSYO3E6HUkSGGcEtjJ-eYAyjh5uasvi2HGnHN6OfpuH06X66mN9Mb5ej63D89BTe3E0er6dhMTq6nwOhlHYHNFr14hZfdZLW-WDIWsNuwlrnwySKg86wk1BWInJjmrJmIHSA62wWv7yEhcVtaPx3LJlat72uH0iIQj0sR7eT0WICtFNTnqIJF9OfH-eL6QTubk8ST5-W01u05APczWZvZmdJUlpxj0gBD8vRcj6uiRwza-5Cq3MTc4sUVTjcP15dz8fl1Wx-PQ0fpktoKA7LX--ncDDzg6d6KJ94VQp-JFL0VZGibyQSAESnpSI0gGWzQt_pouJeCZVUy4vQPiO0j3XDjlfFO9b1Ky2l3uE2AKGs_UoTKdTzIZK9yoUmwI5Yhr_wOHcskhhsKRNYwQuFcr-10Du-nrpiDdGB-bHFW5blFe8Ti_cdipQ3ojeoh6iCvI7BSg2Dr9JNjUFH8vkpoA6-DVDjFMjtiFTvwLDzWZDOhUxA6rXfFhZZpc5loPOT8PjMJFfkvPMT_retGxa3ECuhYEhoD5RQv7FqM9i7GhA663ZIbwJXSIIxh-BY1JLgMXmGOZbQmfduIkz1M86yti4YzUbz6-kEC5qvPwF1Fn203CBZITSdTYzOIv1C6MyamNCZlNu0VUP4zOuA_zEwZh4iCb0i9AoAWr64mMTFDdqBFu5ZgZn04hxawu6t0Rq3nrPrCitmE77lEutfQmdjnaZMJddC8aXWEqV6mPyE_25YfPfw1A3a3bZNnqF1M4HWzfIzerZuZp8gaydAzjufoEt1krIMWvpTc8dwxMCFWf3jrZsC5FrTF5ZmBSvMkWWR3wCCmm3ht7mClZAcyhyWwMro9G-YLBjRQ5B_K-6sKn5oB79wBig2U8EIlIaUuXiDa6DROoGVNiCUcIJJ8f_MCa1A406v_2FBS2j_x93twrEP6U3hj7_y-cbOaoTCEL3VK5zkd5EgFAhlHVNO1C5Bff3vagcHNuNxw22E9htwDwe8L-xXDBE6KFtyzP0tcY3KBHWm6QMWsdwisG-44d8vb5Fe3cX6i6hI6Cy3-EBd2M5KJCZ0tu0SOgvDsjlGZ4fF0t6QYNSlXRKMesOmc2OmEpGgA5vrEKv4DfcLxm-rY53tmwSoMW7wtsLXO8WKflZ6p5Bqy43FGCjhqv_VtfZ946C5qIHQEQYGFtDPrCHsdxWplAKt6jQKUfQSTmCdR8mudcDMOsc6pdloDK_nV-P7-_Dxdv7z4zS8Xy7C5WL-ZT66DkdX83p4Ob25vx4tp-GX-UNjnkb994OE7AChyMftkZCtwUeslca9aTCCcp_qG_-E9oUNyx59WMev8DE7boRhQVBsC0gw_gC5KjdU11smc45O2bGi52GZE3YleAKkd-VLynCSp-neI4kzOUfMKIGn8sb47vZhOX26XzRdTgdldyZ0GBjh7d30aTy9X_pUFiIJ5rJMC-V43T8dQ1jri4k0dGxdjb3JSz-Ig4cdj0z_TgfXfclXfi19hk78wLN-9B_nT-orveDz7ox1LhNvWF8Roktf4V74WJhhmpXox9ZM-B7z_xLLn0gsVUS-CsSPDO2r5zDMX0XoDxVq3UHng9zQLGfquHtds5RIYqFTp1KLJohyB12_3jOjtyKp-tdfBex_NU73Tq_rP2Nr-llbn4bMMYTXX5hc8NXSL7ZxAcAY72GY_LgBSzvdH8mG_6d1svhH2rHb-a52_KAN69-EVa-76rYhMhMOdto821fnLBxuOz2xb31waTkIFB4s27cBBKH9LYeIcwU7JhwS7Tkz1tf8vg-HO4REg9UpdxuxVkXbsrQdVP308pSI5Ty1wCKrZe643EOucotmKF_S6WgrdG7l3svPYie2SIXZxDGheALRHjKuM8lht9GwY8qfkrGcw_jNlDaPY-5f__2C9ZLhIPnKU-eWwyK3ruy-eyaseI6Zsm9fdA0yo2NuC_Hn4DY6X28cCAW0QwPw1oOdLxgiXplArUGvwOaZ728jSRvgKnf-tE15tqYarY7X3GCA3dDCdk2b-ZeaBdPfUOINs9WRIN-8siiMP0oDVqi15LBiMXcoQWmPNoDiO1iWr3dxFQkLkX_JWcaF41IWB5VK47w78uJD0W1YfThoJV5AuDbAyIKwBR8LDIPVcZzdiZQjO29BnpRR4Ru3jfi7l5xZDkn5hsSyvefDXzJuBMYuk8i7uo94odAxTMp9qUPj5JItAlVqDGWFvkIJdswYHyYbhgL7M1x-tsNbvkI64bAEYlIilSsObU3ugKm9d0C5cM6SyyAZBkN2xi-7F4MuDS6Gw-HZ5rLX4cNVrxuc9yPajbvRYDW8GPYH8SqKO_SCDs7EJUZN57zb7Q66F8Gw3RueRzFfrWhn1V8Noj457_CUCdmWcpu2tVmfCWtzfnlBO_3umWQRl7Y6oWYufYs8yteWnHekf3daP-aEk_zyVivLlRUxk82gRoO-C6G3i4d2znIjLzfOZRbrSP_eey3cJo_asU7LDv37Rr0XGNHVy_yfAAAA__9TFRiN">