#include #include struct Null{}; typedef boost::make_recursive_variant < Null , std::pair< int, boost::recursive_variant_ > >::type IntList; const IntList ilNull = IntList( Null( ) ); void ilPushFront1( IntList & il, int i ) { il = IntList( std::make_pair( i, il ) ); } void ilPushFront2( IntList & il, int i ) { IntList il2 = IntList( std::make_pair( i, ilNull ) ); boost::get >( il2 ).second.swap( il ); il.swap( il2 ); } int main() { QTime t; t.start(); IntList il = ilNull; for( int i = 0; i < 1000; ++i ) ilPushFront1( il, i ); std::cout << "unoptimized ilPushFront: " << t.restart() << std::endl; for( int i = 0; i < 1000; ++i ) ilPushFront1( il, i ); std::cout << "unoptimized ilPushFront w/ larger list: " << t.restart() << std::endl; IntList il2 = ilNull; for( int i = 0; i < 1000; ++i ) ilPushFront2( il2, i ); std::cout << "optimized ilPushFront: " << t.restart() << std::endl; for( int i = 0; i < 1000; ++i ) ilPushFront2( il2, i ); std::cout << "optimized ilPushFront w/ larger list: " << t.restart() << std::endl; };