10#ifndef _TEUCHOS_TYPE_NAME_TRAITS_HPP_
11#define _TEUCHOS_TYPE_NAME_TRAITS_HPP_
27#if defined(__IBMCPP__) && ( __IBMCPP__ < 900 || __IBMCPP__ == 1210 )
28# define TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
45TEUCHOSCORE_LIB_DLL_EXPORT std::string
demangleName(
const std::string &mangledName );
61#ifndef TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
85 typedef typename std::remove_const_t<T>
ncT;
86#ifndef TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
108 typedef typename std::remove_const_t<T>
ncT;
113#define TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(TYPE) \
115class TypeNameTraits<TYPE> { \
117 static std::string name() { return (#TYPE); } \
118 static std::string concreteName(const TYPE&) { return name(); } \
121TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
bool);
122TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
char);
123TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
signed char);
124TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned char);
125TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
short int);
126TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
int);
127TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
long int);
128TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned short int);
129TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned int);
130TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned long int);
131TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
float);
132TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
double);
134#ifdef HAVE_TEUCHOSCORE_QUADMATH
135TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(__float128);
138#ifdef HAVE_TEUCHOS_LONG_DOUBLE
139TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
long double);
143class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<T*> {
147 static std::string concreteName(T_ptr) {
return name(); }
152class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<std::string> {
154 static std::string name() {
return "string"; }
155 static std::string concreteName(
const std::string&)
161class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<void*> {
163 static std::string name() {
return "void*"; }
164 static std::string concreteName(
const std::string&) {
return name(); }
174class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<void> {
176 static std::string name() {
return "void"; }
177 static std::string concreteName(
const std::string&) {
return name(); }
181#ifdef HAVE_TEUCHOS_COMPLEX
185class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<std::complex<T> > {
187 static std::string name()
188 {
return "complex<"+TypeNameTraits<T>::name()+
">"; }
189 static std::string concreteName(
const std::complex<T>&)
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
Smart reference counting pointer class for automatic garbage collection.
Default traits class that just returns typeid(T).name().
static std::string concreteName(const T &t)
static std::string name()
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
std::string concreteTypeName(const T &t)
Template function for returning the type name of the actual concrete name of a passed-in object.
TEUCHOSCORE_LIB_DLL_EXPORT std::string demangleName(const std::string &mangledName)
Demangle a C++ name if valid.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...