Bonjour à tous,

je suis en train de créer un système d'allocation mémoire en définissant mes propres allocators. Sans rentrer dans les détails je créer plusieurs MACRO pour réaliser des allocations et celle qui me fait me poser des questions est ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
#define CL_IS_POD(type) cl::IntToType<cl::IsPOD<type>::m_value>()
#define CL_NEW_ARRAY(type,allocator) cl::NewArray<cl::CArray<type>::m_type>(allocator,cl::CArray<type>::m_count,CL_IS_POD(cl::CArray<type>::m_type))
La macro CL_IS_POD est en fait std::is_pod<T>::value présent dans <type_traits> sous Visual Studio 2010. En fonction de la valeur retourné j'utilise tel ou tel fonction d'allocation.
cl::CArray est un trick template:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
template<class T>
struct CArray{};
template<class T, size_t N>
struct CArray<T[N]>
{
     typedef T m_type;
     static const size_t m_count = N;
};
La question est plus "Qu'est ce qu'un POD?" j'ai déjà une réponse mais je m'interroge sur mes connaissances des POD car lorsque je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
struct pod
{
    float* p;
};
std::is_pod<pod>::value me donne true.
Et avec ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
class pod
{
    float* p;
};
std::is_pod<pod>::value me donne false.
Or il n'y a ni constructeur, ni destructeur, ni fonction virtuel membre...
Est-ce normal?
J'ai le même résultat avec std::is_pod et std::tr1::is_pod.

Merci