42 #ifndef _TEUCHOS_TYPE_NAME_TRAITS_HPP_
43 #define _TEUCHOS_TYPE_NAME_TRAITS_HPP_
59 #if defined(__IBMCPP__) && ( __IBMCPP__ < 900 || __IBMCPP__ == 1210 )
60 # define TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
77 TEUCHOSCORE_LIB_DLL_EXPORT std::string
demangleName(
const std::string &mangledName );
93 #ifndef TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
117 typedef typename std::remove_const_t<T> ncT;
118 #ifndef TEUCHOS_TYPE_NAME_TRAITS_OLD_IBM
140 typedef typename std::remove_const_t<T> ncT;
145 #define TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(TYPE) \
147 class TypeNameTraits<TYPE> { \
149 static std::string name() { return (#TYPE); } \
150 static std::string concreteName(const TYPE&) { return name(); } \
153 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
bool);
154 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
char);
155 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
signed char);
156 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned char);
157 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
short int);
158 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
int);
159 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
long int);
160 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned short int);
161 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned int);
162 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
unsigned long int);
163 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
float);
164 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
double);
166 #ifdef HAVE_TEUCHOSCORE_QUADMATH
167 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(__float128);
168 #endif // HAVE_TEUCHOSCORE_QUADMATH
170 #ifdef HAVE_TEUCHOS_LONG_DOUBLE
171 TEUCHOS_TYPE_NAME_TRAITS_BUILTIN_TYPE_SPECIALIZATION(
long double);
172 #endif // HAVE_TEUCHOS_LONG_DOUBLE
175 class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<T*> {
179 static std::string concreteName(T_ptr) {
return name(); }
184 class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<std::string> {
186 static std::string name() {
return "string"; }
187 static std::string concreteName(
const std::string&)
193 class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<void*> {
195 static std::string name() {
return "void*"; }
196 static std::string concreteName(
const std::string&) {
return name(); }
206 class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<void> {
208 static std::string name() {
return "void"; }
209 static std::string concreteName(
const std::string&) {
return name(); }
213 #ifdef HAVE_TEUCHOS_COMPLEX
217 class TEUCHOSCORE_LIB_DLL_EXPORT TypeNameTraits<std::complex<T> > {
219 static std::string name()
221 static std::string concreteName(
const std::complex<T>&)
226 #endif // HAVE_TEUCHOS_COMPLEX
233 #endif // _TEUCHOS_TYPE_NAME_TRAITS_HPP_
static std::string concreteName(const T &t)
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
TEUCHOSCORE_LIB_DLL_EXPORT std::string demangleName(const std::string &mangledName)
Demangle a C++ name if valid.
std::string concreteTypeName(const T &t)
Template function for returning the type name of the actual concrete name of a passed-in object...
Default traits class that just returns typeid(T).name().
static std::string name()
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.