yeah, I was hoping I was but since you're asking probably not? In that case, do clarify and while you do so permit me another interpretation of the problem which I think is quite interesting:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# include <iostream>
# include <type_traits>
# include <iomanip>
struct A{A* a;};
struct B{};
template <typename T> struct has_own_pointer : std::false_type{};
template <> struct has_own_pointer <A> : std::true_type{};
int main()
{
std::cout << std::boolalpha << has_own_pointer<B> :: value << "\n";
std::cout << has_own_pointer<A> :: value << "\n";
}
Here I'm assuming your SelfType is akin to a pointer to the same type (obviously it can't be an object of the same type since that'd result in an incomplete type)