id summary reporter owner description type status milestone component version severity resolution keywords cc 3705 Boost.Function FAQ anonymous Douglas Gregor "From http://groups.google.com/group/comp.lang.c++.moderated/tree/browse_frm/thread/f66ee6174fb04762/a5c99eadde5a1e52?rnum=1&_done=/group/comp.lang.c%2B%2B.moderated/browse_frm/thread/f66ee6174fb04762/a5c99eadde5a1e52%3Ftvc%3D1%26#doc_b36422ac63363172 --------------------------------------------------------------- Peter Dimov > On Dec 2, 7:18 am, Sebastian Hauer wrote: > Hi, > Recently I had the need for an efficient polymorphic function wrapper > (aka delegate), so I looked at a few possible options such as > boost::function and FastDelegate. I also came across tr1::function > which I was blissfully unaware of until now, considering that the > original proposal was from late 2002 (see:http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1402.html). > While reading the proposal I noticed that a tr1::function can throw a > bad_function_call exception if no target was assigned. > I was just wondering for the rationale behind this design decision. > In my opinion the fact that it throws goes against C++'s notion > of ""you only pay for what you use"". > I'm interested in hearing what your thoughts are on this. This behavior doesn't need to impose a cost. An std::function (it's officially in C++0x) that hasn't been assigned a target may internally store a target function that throws bad_function_call. It need not test on every call (even though the test wouldn't impose much overhead compared to the indirect call that follows.) ------------------------------------------------------------------- Please add this to Boost.Function FAQ." Feature Requests closed Boost 1.42.0 function Boost 1.41.0 Problem wontfix