On 10 Maj, 07:02, "Jim Langston" <tazmas...@rocketmail.comwrote:
"Sylvester Hesp" <s.h...@oisyn.nlwrote in message
news:46*********************@news.xs4all.nl...
"Angel Tsankov" <fn42...@fmi.uni-sofia.bgwrote in message
news:f1**********@aioe.org...
--
Angel Tsankov
fn42...@fmi.uni-sofia.bg
"Sylvester Hesp" <s.h...@oisyn.nlwrote in message
news:46*********************@news.xs4all.nl...
"Angel Tsankov" <fn42...@fmi.uni-sofia.bgwrote in message
news:f1**********@aioe.org...
How can an overloaded operator& take the address of its argument:
>>template<typename T>
Smth operator &(T& SomeObject)
{
// The address of SomeObject is needed here
}
>It's argument is always 'this', as you can't define the unary & as a
non-member. And since 'this' is a pointer, you already have it's address
:)
Does the standard say that unary address-of operator must be a member?If
so, where?
You're absolutely right, I was mistaken.
You could take the address by using a reinterpret_cast to a primitive type
on which the unary & does what you want. boost::addressof does it like
that:
template<class TT* addressof(T& t)
{
return reinterpret_cast<T*>(&const_cast<char&>(reinterpre t_cast<const
volatile char&>(t)));
}
I must be missing something. Why wouldn't
template<class TT* addressof(T& t)
{
return &*t;
}
work?
First you dereference t (which means that T must either be a pointer
of implement operator *) and then you take the address of what was
returned. So if T was a normal pointer then you would return a copy of
t right?
However since the return-type is T* this does not compile for normal
pointers, nor for builtin functions. The only thing I can see this
working for is something like this:
struct Foo {
Foo& operator*() {return *this;}
};
I think you must have forgotten something in your previous post.
--
Erik Wikström