[clang] [CUDA][HIP] Fix CTAD for host/device constructors (PR #168711)
Artem Belevich via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 19 12:05:57 PST 2025
================
@@ -287,6 +287,46 @@ Example Usage
basePtr->virtualFunction(); // Allowed since obj is constructed in device code
}
+C++17 Class Template Argument Deduction (CTAD) Support
+======================================================
+
+Clang supports C++17 Class Template Argument Deduction (CTAD) in both host and device code for HIP.
+This allows you to omit template arguments when creating class template instances, letting the compiler
+deduce them from constructor arguments.
+
+.. code-block:: c++
+
+ #include <tuple>
+
+ __host__ __device__ void func() {
+ std::tuple<int, int> t = std::tuple(1, 1);
+ }
+
+In the above example, ``std::tuple(1, 1)`` automatically deduces the type to be ``std::tuple<int, int>``.
+
+Deduction Guides
+----------------
+
+User-defined deduction guides are also supported. Since deduction guides are not executable code and only
+participate in type deduction, they are treated as ``__host__ __device__`` by the compiler, regardless of
+explicit target attributes. This ensures they are available for deduction in both host and device contexts.
----------------
Artem-B wrote:
I'm not convinced that ignoring target attribute is the best approach here.
Perhaps we should require deduction guides to always be host/device, either explicitly or implicitly.
https://github.com/llvm/llvm-project/pull/168711
More information about the cfe-commits
mailing list