Re: nullptr placeholder without #define
On 5 Mar, 11:12, "Joe Smith" <unknown_kev_...@hotmail.com> wrote:
These are GCC issues. Comeau C++ rightly rejects that with a reasonable
error.
One other issue of GCC (MinGW-GCC 3.4.5 wich is not supported anymore)
is the inability to use this implementation for pointers to member functions.
The real problem here is that I do not know of better free C++ compiler
for windows and am stuck with it. And I'm stuck with using '0' wich now is:
#define nullptr 0
One minor nit. You should add a member of type "void* const" to the class,
preferably with a implementation reserved name like _Val. (Yes, this is not
allowed by the standard, but no real implementation should have issue with
that, and if anybody tries to access the member the use of such naming
should make it clear that something is wrong).
I think that more proper solution would be making it private.
Since (despite the standard) most compilers support users adding things to
namespace std at the slight risk of breaking things (which this would most
likely not do), I would wrap all that in a "namespace std{/*...*/}" block,
and add a "using ::std::nullptr;" statement at the end.
I realy did not intend to simulate nullptr in such detail but it won't
hurt I suppose.
Current version looks like this:
const class nullptr_t {
public:
template<class T>
operator T*() const { return 0; }
template<class T, class U>
operator T U::*() const { return 0; }
private:
void* p;
void operator&() {}
} nullptr = nullptr_t();
nullptr should be constant (or more specifically it should be a literal)
and obtaining its address shouldn't be possible. I've also overloaded
operator!= ;).
It's a pity I cannot use it though...
Cheers
Sfider
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]