#include "boost/optional.hpp" #include "boost/static_assert.hpp" #include "boost/type_traits.hpp" using namespace boost; typedef optional oc; typedef optional oi; typedef optional of; typedef optional os; BOOST_STATIC_ASSERT( sizeof(oc) <= 2*sizeof(char) ); BOOST_STATIC_ASSERT( sizeof(oi) <= 2*sizeof(int) ); BOOST_STATIC_ASSERT( !has_trivial_default_constructor::value ); //never true for optional BOOST_STATIC_ASSERT( !has_trivial_default_constructor::value ); BOOST_STATIC_ASSERT( has_trivial_destructor::value ); //should be true where has_trivial_destructor BOOST_STATIC_ASSERT( has_trivial_destructor::value ); BOOST_STATIC_ASSERT( !has_trivial_destructor::value ); BOOST_STATIC_ASSERT( has_trivial_copy::value ); //should be true where has_trivial_copy BOOST_STATIC_ASSERT( has_trivial_copy::value ); BOOST_STATIC_ASSERT( !has_trivial_copy::value ); BOOST_STATIC_ASSERT( has_trivial_assign::value ); //should be true where has_trivial_assign BOOST_STATIC_ASSERT( has_trivial_assign::value ); BOOST_STATIC_ASSERT( !has_trivial_assign::value ); BOOST_STATIC_ASSERT( oi::dtor_optimized::value ); BOOST_STATIC_ASSERT( oi::copy_optimized::value ); BOOST_STATIC_ASSERT( of::dtor_optimized::value ); BOOST_STATIC_ASSERT( of::copy_optimized::value ); /* * The code generated below can be looked at with objdump to see if it is suboptimal */ void assign_optional_int(oi& x,oi& y){ x=y; } void reset_optional_int(oi& x){ x=boost::none; }