diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2025-03-19 15:41:36 +0100 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2025-03-19 15:41:36 +0100 | 
| commit | 018e1ba581ec6f01f069a45ec4cf89f152b44d5f (patch) | |
| tree | 0e7dda4bb693a6714066fbe5efcd2f24ff7c1a65 /libcutl/cutl/meta/polymorphic-p.hxx | |
| parent | 1c188393cd2e271ed2581471b601fb5960777fd8 (diff) | |
remerge
Diffstat (limited to 'libcutl/cutl/meta/polymorphic-p.hxx')
| -rw-r--r-- | libcutl/cutl/meta/polymorphic-p.hxx | 50 | 
1 files changed, 50 insertions, 0 deletions
diff --git a/libcutl/cutl/meta/polymorphic-p.hxx b/libcutl/cutl/meta/polymorphic-p.hxx new file mode 100644 index 0000000..dd820db --- /dev/null +++ b/libcutl/cutl/meta/polymorphic-p.hxx @@ -0,0 +1,50 @@ +// file      : cutl/meta/polymorphic-p.hxx +// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC +// license   : MIT; see accompanying LICENSE file + +#ifndef CUTL_META_POLYMORPHIC_HXX +#define CUTL_META_POLYMORPHIC_HXX + +#include <cutl/meta/class-p.hxx> +#include <cutl/meta/remove-cv.hxx> + +namespace cutl +{ +  namespace meta +  { +    template <typename CVX> +    struct polymorphic_p +    { +      typedef typename remove_cv<CVX>::r X; + +      template <typename Y, bool C> +      struct impl +      { +        static const bool r = false; +      }; + +      template <typename Y> +      struct impl<Y, true> +      { +        struct t1: Y +        { +          t1 (); +        }; + +        struct t2: Y +        { +          t2 (); + +          virtual +          ~t2 () throw (); +        }; + +        static const bool r = sizeof (t1) == sizeof (t2); +      }; + +      static const bool r = impl<X, class_p<X>::r>::r; +    }; +  } +} + +#endif // CUTL_META_POLYMORPHIC_HXX  | 
