is_same_object.h

Back to Orphans

pastel/sys/type_traits/

#ifndef PASTELSYS_IS_SAME_OBJECT_H
#define PASTELSYS_IS_SAME_OBJECT_H

#include "pastel/sys/type_traits.h"

namespace Pastel {

    template <typename T>
    constexpr bool IsPlain = 
        std::is_object_v<T> && !std::is_const_v<T> && !std::is_volatile_v<T>;

}

namespace Pastel {

    template <typename... Ts>
    struct IsSameObject_;

    template <typename T, typename S, typename... Ts>
    struct IsSameObject_<T, S, Ts...> {
        static constexpr const bool value = 
            std::is_same<RemoveCvRef<T>, RemoveCvRef<S>>::value && 
            IsSameObject_<S, Ts...>::value; 
    };

    template <typename T>
    struct IsSameObject_<T> : std::true_type {};

    template <>
    struct IsSameObject_<> : std::true_type {};

    template <typename... Ts>
    constexpr bool IsSameObject = IsSameObject_<Ts...>::value;

}

#endif