Re: function call without ()
johnchx2@yahoo.com wrote:
Frederick Gotham wrote:
Have you considered the likes of the following?
class MyClass {
public:
class MemberProcessor {
public:
operator int() const {
return 5;
}
};
MemberProcessor member;
};
int main() {
MyClass obj;
int i = obj.member;
}
Yes, and some some variations on the theme. The main drawback is the
space overhead ("member" adds to the size of the containing class).
Perhaps the solution is not to introduce some new C#-like property
syntax, but instead to have a way of saying that a member should take
up no space. The bit-field syntax already provides a way of doing this
(though only integral or enum types are currently allowed, and zero has
a special meaning). It would only take a very minor language change to
make the following legal
struct C {
struct {
operator int() const { return 42; }
} m : 0;
};
Indeed, if you omit the ": 0", it already is legal, and, excepting the
fact that it takes up space, does the right thing; all the ": 0"
specifier would do is (i) tell the compiler that it is allowed to not
allocate space for the object; and (ii) per 9.6/3, prevent the address
of the member from being taken (though perhaps an overloaded operator&
could be allowed).
So far as I can see, all that would be required to make this legal
would be to change the second sentence of 9.6/3 to allow empty classes
and the last sentence of 9.6/2 to allow a size of zero to be specified
for empty classes. And I find it hard to believe that this would cause
implementation difficulties for compiler vendors.
Of course, some syntactic sugar like C#'s property syntax might make
this more palatable.
--
Richard Smith
---
[ 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 ]