#include <boost/optional.hpp>
#include <boost/utility.hpp>
struct Foo : boost::noncopyable
{
Foo(int i)
{
}
};
#define CONSTRUCT_OPTIONAL(dest, ctor_expr) \
new ((dest).get_ptr()) ctor_expr;
int main()
{
typedef boost::optional<Foo> OptFoo;
OptFoo foos[100];
CONSTRUCT_OPTIONAL(foos[3], Foo(2));
}