So I've seen a lot written about the value of simplicity in software. Simplicity as a way to help manage complexity and thus the chance of unwanted/unanticipated interations. And then I look at projects like Boost (boost.org), and I recognize that there are some really neat libraries being written there, but I also have to wonder if some of the complexity is almost unmanagable.
I just got a single undefined library error from my project which is heavily using boost. Here's my one (ONLY one) link error from the attempt to link together the dll:
database.obj : error LNK2019: unresolved external symbol "private: class stldb::trans_map
[
Error: Irreparable invalid markup ('<class [...] boost::interprocess_container::basic_string<char,struct>') in entry. Owner must fix manually. Raw contents below.]
So I've seen a lot written about the value of simplicity in software. Simplicity as a way to help manage complexity and thus the chance of unwanted/unanticipated interations. And then I look at projects like Boost (boost.org), and I recognize that there are some really neat libraries being written there, but I also have to wonder if some of the complexity is almost unmanagable.
I just got a single undefined library error from my project which is heavily using boost. Here's my one (ONLY one) link error from the attempt to link together the dll:
database.obj : error LNK2019: unresolved external symbol "private: class stldb::trans_map<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,struct std::less<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::cached_node_allocator<struct std::pair<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > const ,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index>,64>,struct stldb::bounded_mutex_family> & __thiscall stldb::trans_map<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,struct std::less<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::cached_node_allocator<struct std::pair<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > const ,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index>,64>,struct stldb::bounded_mutex_family>::operator=(class stldb::trans_map<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,struct std::less<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::cached_node_allocator<struct std::pair<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > const ,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index>,64>,struct stldb::bounded_mutex_family> &)" (??4?$trans_map@V?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@V123@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@@std@@V?$cached_node_allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@V123@@std@@V?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@$0EA@@interprocess@3@Ubounded_mutex_family@stldb@@@stldb@@AAEAAV01@AAV01@@Z) referenced in function "public: void __thiscall stldb::trans_map<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,struct std::less<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::cached_node_allocator<struct std::pair<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > const ,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index>,64>,struct stldb::bounded_mutex_family>::map_entry_transactional_operation::set_container(class stldb::trans_map<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > >,struct std::less<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::cached_node_allocator<struct std::pair<class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > const ,class boost::interprocess_container::basic_string<char,struct std::char_traits<char>,class stldb::region_or_heap_allocator<class boost::interprocess::allocator<char,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index> >,class std::allocator<char> > > >,class boost::interprocess::segment_manager<char,class boost::interprocess::rbtree_best_fit<struct stldb::bounded_mutex_family,class boost::interprocess::offset_ptr<void>,0>,class boost::interprocess::flat_map_index>,64>,struct stldb::bounded_mutex_family> &)" (?set_container@map_entry_transactional_operation@?$trans_map@V?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@V123@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@@std@@V?$cached_node_allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$region_or_heap_allocator@V?$allocator@DV?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@@interprocess@boost@@V?$allocator@D@std@@@stldb@@@interprocess_container@boost@@V123@@std@@V?$segment_manager@DV?$rbtree_best_fit@Ubounded_mutex_family@stldb@@V?$offset_ptr@X@interprocess@boost@@$0A@@interprocess@boost@@Vflat_map_index@23@@interprocess@boost@@$0EA@@interprocess@3@Ubounded_mutex_family@stldb@@@stldb@@QAEXAAV23@@Z)
Long enough for you?