Я устал ждать поддержки компилятором nullptr
(gcc 4.6 поддерживает, но это поэтому несколько новых дистрибутивов поддерживают его).
Поэтому в качестве временного интервала до тех пор, пока nullptr
не будет полностью поддерживаться, я решил подражать ему. Есть два примера эмуляции: один из здесь и один из викикниги.
Следует отметить, что ни в одной из реализаций не упоминается operator ==
. Однако без него следующий код не будет компилироваться.
int* ptr = nullptr;
assert( ptr == nullptr ); // error here: missing operator ==
Является ли эта ошибка operator ==
ошибкой компилятора?
Нужен ли operator ==
(и !=
, <
, <=
и т. д.) для более совершенной имитации nullptr
?
Чем еще отличается эмулируемый nullptr
от реального?
assert(ptr);
в первую очередь? - person ildjarn   schedule 07.06.2011nullptr
должен быть частью Стандарта, потому что он имеет значение только тогда, когда все используют один и тот же тип нулевого указателя —std::nullptr_t
. Если бы каждый реализовал свой собственный нулевой указатель, как бы вы написали функцию, которая принимала бы нулевой указатель? Вы не знаете, что такое нулевой тип указателя. - person Puppy   schedule 07.06.2011std::remove( v.begin(), v.end(), nullptr );
, который использует оператор равенства. И причина, по которой я не буду использоватьstd::remove_if
, заключается в том, что я этого не хочу. Я хочу, чтобы он работал как настоящийnullptr
. - person deft_code   schedule 07.06.2011