17#ifndef KOKKOS_TYPE_INFO_HPP
18#define KOKKOS_TYPE_INFO_HPP
24#include <Kokkos_Macros.hpp>
35#if (!defined(KOKKOS_COMPILER_INTEL) || \
36 (__INTEL_COMPILER_BUILD_DATE >= 20210228)) && \
37 (!defined(KOKKOS_COMPILER_NVCC) || (KOKKOS_COMPILER_NVCC >= 1130)) && \
38 (!(defined(KOKKOS_COMPILER_NVCC) && defined(KOKKOS_COMPILER_MSVC)))
40#define KOKKOS_ENABLE_IMPL_TYPEINFO
45constexpr std::array<char, N> to_array(std::string_view src) {
46 std::array<char, N> dst{};
47 for (
size_t i = 0; i < N; ++i) {
54constexpr auto type_name() {
56 constexpr std::string_view func = __PRETTY_FUNCTION__;
57 constexpr std::string_view prefix{
"[T = "};
58 constexpr std::string_view suffix{
"]"};
59#elif defined(__GNUC__)
60 constexpr std::string_view func = __PRETTY_FUNCTION__;
61 constexpr std::string_view prefix{
"[with T = "};
62 constexpr std::string_view suffix{
"]"};
63#elif defined(_MSC_VER)
64 constexpr std::string_view func = __FUNCSIG__;
65 constexpr std::string_view prefix{
"type_name<"};
66 constexpr std::string_view suffix{
">(void)"};
70 constexpr auto beg = func.find(prefix) + prefix.size();
71 constexpr auto end = func.rfind(suffix);
72 static_assert(beg != std::string_view::npos);
73 static_assert(end != std::string_view::npos);
74 return to_array<end - beg>(func.substr(beg, end));
79 static constexpr auto value_ = type_name<T>();
82 static constexpr std::string_view name() noexcept {
83 return {value_.data(), value_.size()};
96 static constexpr std::string_view name() noexcept {
return "not supported"; }
ScopeGuard Some user scope issues have been identified with some Kokkos::finalize calls; ScopeGuard a...