According to http://www.cplusplus.com/reference/list/list/size/, list::size must be constant time in C++11.
That may make 'splice' slower. See http://home.roadrunner.com/~hinnant/On_list_size.html (I think that could be solved by having list iterators carry a field pointing to their container, but haven't given it much thought. Corrections welcome)