From 4836304a1b05f84377103260f4a10536a90bc635 Mon Sep 17 00:00:00 2001 From: Adrian Burri <burriad@dune-project.org> Date: Mon, 7 Nov 2005 08:27:29 +0000 Subject: [PATCH] Added struct to find out reference/pointer type [[Imported from SVN: r3348]] --- common/typetraits.hh | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/common/typetraits.hh b/common/typetraits.hh index d7ff65c10..ca21fa887 100644 --- a/common/typetraits.hh +++ b/common/typetraits.hh @@ -17,6 +17,52 @@ namespace Dune * * @{ */ + + /** + * @brief Just an empty class + */ + struct Empty {}; + + /** + * @brief General type traits class to check whether type is reference or + * pointer type + */ + template <typename T> + class TypeTraits + { + private: + template <class U> + struct PointerTraits { + enum { result = false }; + typedef Empty PointeeType; + }; + + template <class U> + struct PointerTraits<U*> { + enum { result = true }; + typedef U PointeeType; + }; + + template <class U> struct ReferenceTraits + { + enum { result = false }; + typedef U ReferredType; + }; + + template <class U> struct ReferenceTraits<U&> + { + enum { result = true }; + typedef U ReferredType; + }; + + public: + enum { isPointer = PointerTraits<T>::result }; + typedef typename PointerTraits<T>::PointeeType PointeeType; + + enum { isReference = ReferenceTraits<T>::result }; + typedef typename ReferenceTraits<T>::ReferredType ReferredType; + }; + /** * @brief Determines wether a type is const or volatile and provides the * unqualified types. -- GitLab