Is it possible to make an operator member_function_pointer_type() without using typedefs (i.e. by specifying the type of the member function pointer inline)?
For example, when implementing the Safe Bool Idiom:
class Foo
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;
};
is it possible to write out the type of bool_type directly when declaring the operator? If so, how?
It seems that this is the only case where one cannot declare a (typecasting) operator without using a typedef.
Had it been another function name or another operator x, then it works fine:
class Foo 
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;
// other syntax
    void (Foo::* some_func () const) () const;  // ok! named function
    void (Foo::* operator * () const) () const;  // ok! operator *
    void (Foo::* operator () const) () const;  // error! typecasting operator
};
Demo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With