Kaspersky Neuromorphic Platform  1.0.0
API Reference
Loading...
Searching...
No Matches
specialization_helpers.h
Go to the documentation of this file.
1
22#pragma once
23
24#include <memory>
25#include <string>
26#include <type_traits>
27#ifndef _MSC_VER
28# include <cxxabi.h>
29#endif
30
34namespace knp::meta
35{
36
46template <class T>
47std::string type_name()
48{
49 typedef typename std::remove_reference<T>::type TR;
50 std::unique_ptr<char, void (*)(void*)> own(
51#ifndef _MSC_VER
52 abi::__cxa_demangle(typeid(TR).name(), nullptr, nullptr, nullptr),
53#else
54 nullptr,
55#endif
56 std::free);
57 std::string result = own != nullptr ? own.get() : typeid(TR).name();
58 if (std::is_const<TR>::value) result += " const";
59 if (std::is_volatile<TR>::value) result += " volatile";
60 if (std::is_lvalue_reference<T>::value)
61 result += "&";
62 else if (std::is_rvalue_reference<T>::value)
63 result += "&&";
64 return result;
65}
66
67
86template <class T, template <class...> class Template>
87struct is_specialization : std::false_type
88{
89};
90
91
102template <template <class...> class Template, class... Args>
103struct is_specialization<Template<Args...>, Template> : std::true_type
104{
105};
106
107} // namespace knp::meta
Metaprogramming library namespace.
std::string type_name()
Return type of variable as a string.
Specialization test template.