jeudi 28 juin 2018

How to check if union contains type (using type_traits)?

I have a function template like the following:

template<class U, class T>
T* unsafeCast(U* theUnion) {
    reinterpret_cast<T*>(theUnion);
}

How can I make sure this only compiles if T is a type contained within the union U, so that the following holds?

union FooUnion {
    int a;
    double b;
} foo;

unsafeCast<FooUnion, int>(&foo); // compiles
unsafeCast<FooUnion, double>(&foo); // compiles
unsafeCast<FooUnion, char>(&foo); // does not compile

I understand that is_union from <type_traits> allows to check for a union, but how can I check for types within a union?

Aucun commentaire:

Enregistrer un commentaire