Я работаю над библиотекой с двумя разными конечными пользователями, один из которых использует gcc 4.5.3, а другой только что перешел на gcc 4.6. .3. Библиотека использует новые интеллектуальные указатели C++11 (в частности, unique_ptr) и отлично компилируется на gcc 4.5.3. Однако между этими двумя версиями gcc начал поддерживать nullptr, поэтому API unique_ptr изменился, чтобы более точно соответствовать стандарту. При этом следующий код превратился из нормального в неоднозначный
unique_ptr up( new int( 30 ) );
...
if( up == 0 ) // ambiguous call now to unique_ptr(int) for 0
Есть ли чистый (а именно, следующее предложение) способ изменить приведенный выше оператор if, чтобы он работал как с nullptr, так и без него? Я хотел бы избежать проверки конфигурации, а затем макроса, подобного следующему (который, я думаю, сработает), если это возможно
#if defined NULLPOINTER_AVAILABLE
#define NULLPTR (nullptr)
#else
#define NULLPTR (0)
#endif
или это единственный способ получить поведение, которое я ищу?