empty struct / enum layout compatibility between host and OpenCL code


I have just learnt the hard way that when defining a struct with no data members:
typedef struct {} someEmptyStruct;
the memory layout for this struct is different on the host (C++) side than on the OpenCL code side (here using AMD APP 2.6 for CPU as device).
Does the OpenCL specification allow here a divergence in memory layout (size), that is empty structs are not allowed as shared between host and device side practically speaking?

Which also raises the questions if enums can safely be shared between host and OpenCL code:
typedef enum {A, B} someEnum;
Given that for the host side alone specifications of enum implementations (e.g. size of the underlying type) are rather weak in C++, I assume such an enum cannot be safely passed between host and device?