1#ifndef __DUNE_ACFEM_COMMON_TOSTRING_HH__
2#define __DUNE_ACFEM_COMMON_TOSTRING_HH__
7#include <dune/common/streamoperators.hh>
9#include "typestring.hh"
15 using Dune::operator<<;
17 template<
class T,
class SFINAE =
void>
23 struct HasStdToString<T,
VoidType<decltype(
std::to_string(std::declval<T>()))> >
27 template<
class T,
class SFINAE =
void>
33 struct IsPrintable<T,
VoidType<decltype(
std::declval<std::ostream&>() << std::declval<T>())> >
37 template<
class T,
class SFINAE =
void>
43 struct HasNameMethod<T,
VoidType<decltype(
std::declval<T>().name())> >
50 template<class T, std::enable_if_t<!IsPrintable<T>::value,
int> = 0>
51 std::string toString(T&& t, PriorityTag<0>)
57 template<class T, std::enable_if_t<IsPrintable<T>::value,
int> = 0>
58 std::string toString(T&& t, PriorityTag<8>)
60 std::ostringstream ss;
61 ss << std::forward<T>(t);
65 template<class T, std::enable_if_t<HasStdToString<T>::value,
int> = 0>
66 std::string toString(T&& t, PriorityTag<9>)
70 std::ostringstream ss;
71 ss << std::forward<T>(t);
75 return std::to_string(std::forward<T>(t));
80 template<class T, std::enable_if_t<(sizeof(std::declval<T>().name()) > 0),
int> = 0>
81 std::string toString(T&& t, PriorityTag<10>)
83 return std::forward<T>(t).name();
88 std::string toString(T&& t)
90 return toString(std::forward<T>(t), PriorityTag<42>{});
auto typeString(T &&t, bool stripNameSpaces=true)
Generator for TypeString.
Definition: typestring.hh:144
typename MakeType< void, Other... >::Type VoidType
Generate void regardless of the template argument list.
Definition: types.hh:151
BoolConstant< false > FalseType
Alias for std::false_type.
Definition: types.hh:110
BoolConstant< true > TrueType
Alias for std::true_type.
Definition: types.hh:107