Re: Is std::tr1::function intended to work ONLY with function objects which implement the operator() as const?
On May 18, 8:02 pm, Florin Neamtu <nea...@zappmobile.ro> wrote:
Hi,
I'm using an STL implementation that fails to compile the below code.
So the question is: is the below code standard? Or the behavior is
implementation-specific?
------------------------------------------------------------------------------
#include <functional>
struct functor
{
void operator() (int) { } // not const
};
int main()
{
functor fun;
std::tr1::function<void(int)> f = fun; // Is this standard?
return 0;}
------------------------------------------------------------------------------
My understanding is that the code is standard compliant.
I believe that you are right and that the code is TR1-compliant. The
requirement of the constructor is that its argument "shall be
callable", and 'fun' fits the definition of Callable. In addition, the
specification of function<>::operator() does not say that the target
is invoked as const, so f(5) should work as well, although this isn't
100% clear from the standard text (even though it's 96% clear in my
opinion).
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]