diff --git a/Include/auROXTL/Objects/SOO.hpp b/Include/auROXTL/Objects/SOO.hpp index 22c6856..1718fd7 100644 --- a/Include/auROXTL/Objects/SOO.hpp +++ b/Include/auROXTL/Objects/SOO.hpp @@ -38,9 +38,10 @@ vis type(AU_FOR_EACH_FIRST(_AUROXTL_INTERRFACE_SOO_EMITTER_0, _AUROXTL_INTERRFACE_SOO_EMITTER_1, ## __VA_ARGS__, (AuUInt32, uSOOSize = kSSOPaddedSize)));\ vis ~type(); -#define AUROXTL_INTERFACE_SOO_HDR_EX(vis, Type, extends, targetSize, ...) \ +#define AUROXTL_INTERFACE_SOO_HDR_EX2(vis, Type, extends, targetSize, ex, ...) \ struct Type ## SOO \ { \ + AU_WHAT ex \ AUROXTL_INTERFACE_SOO_HDR_(vis, Type ## SOO, targetSize, ## __VA_ARGS__) \ inline auto operator ->() \ { \ @@ -87,6 +88,15 @@ struct Type ## SOO using Type ## SOO_t = Type ## SOO; \ using Type = Type ## SOO; +#define AUROXTL_INTERFACE_SOO_HDR_EX(vis, Type, extends, targetSize, ...) \ + AUROXTL_INTERFACE_SOO_HDR_EX2(vis, Type, extends, targetSize, (struct {};), __VA_ARGS__) + +#define AUROXTL_INTERFACE_SOO_HDR_EX_NC(vis, Type, extends, targetSize, ...) \ + AUROXTL_INTERFACE_SOO_HDR_EX2(vis, Type, extends, targetSize, (AU_NO_COPY(Type ## SOO); AU_MOVE(Type ## SOO);), __VA_ARGS__) + +#define AUROXTL_INTERFACE_SOO_HDR_EX_NCM(vis, Type, extends, targetSize, ...) \ + AUROXTL_INTERFACE_SOO_HDR_EX2(vis, Type, extends, targetSize, (AU_NO_COPY_NO_MOVE(Type ## SOO)), __VA_ARGS__) + #define AUROXTL_INTERFACE_SOO_HDR(Type, extends, targetSize, ...) \ AUROXTL_INTERFACE_SOO_HDR_EX(, Type, extends, targetSize, ## __VA_ARGS__)