diff --git a/src/lib/opaque-holder.hpp b/src/lib/opaque-holder.hpp index 646c24b45..d19ecfcc8 100644 --- a/src/lib/opaque-holder.hpp +++ b/src/lib/opaque-holder.hpp @@ -73,6 +73,7 @@ #include "lib/util.hpp" #include +#include namespace lib { @@ -266,7 +267,8 @@ namespace lib { explicit Buff (SUB const& obj) { - REQUIRE (siz >= sizeof(SUB)); + BOOST_STATIC_ASSERT (siz >= sizeof(SUB)); + new(Buffer::ptr()) SUB (obj); } @@ -613,6 +615,8 @@ namespace lib { void placeDefault() { + BOOST_STATIC_ASSERT (siz >= sizeof(DEFAULT)); + new(&buf_) DEFAULT(); } @@ -640,13 +644,14 @@ namespace lib { destroy(); \ try \ { \ - REQUIRE (siz >= sizeof(TY)); \ - return *new(&buf_) _CTOR_CALL_; \ - } \ - catch (...) \ - { \ - placeDefault(); \ - throw; \ + BOOST_STATIC_ASSERT (siz >= sizeof(TY));\ + \ + return *new(&buf_) _CTOR_CALL_; \ + } \ + catch (...) \ + { \ + placeDefault(); \ + throw; \ } diff --git a/src/lib/polymorphic-value.hpp b/src/lib/polymorphic-value.hpp index a9b92bc5e..2213a67a3 100644 --- a/src/lib/polymorphic-value.hpp +++ b/src/lib/polymorphic-value.hpp @@ -146,6 +146,7 @@ #include "lib/meta/duck-detector.hpp" #include +#include namespace lib { @@ -384,7 +385,8 @@ namespace lib { template PolymorphicValue (IMP*) { - REQUIRE (siz >= sizeof(IMP)); + BOOST_STATIC_ASSERT (siz >= sizeof(IMP)); + new(&buf_) IMP(); } diff --git a/src/proc/mobject/output-designation.hpp b/src/proc/mobject/output-designation.hpp index d9b24dc6e..ab5c3ca55 100644 --- a/src/proc/mobject/output-designation.hpp +++ b/src/proc/mobject/output-designation.hpp @@ -103,10 +103,12 @@ namespace mobject { }; private: - enum { - SPEC_SIZ = mp::maxSize< + enum + { VTABLE = sizeof(size_t) + , SPEC_SIZ = VTABLE + + mp::maxSize< mp::Types< PID, lumiera_uid, uint>::List>::value - }; + }; typedef lib::OpaqueHolder SpecBuff;