unique_ptr, nullptr и поддержка gcc 4.5.x и 4.6.x

Я работаю над библиотекой с двумя разными конечными пользователями, один из которых использует 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

или это единственный способ получить поведение, которое я ищу?

5
задан R. Martinho Fernandes 2 June 2012 в 18:01
поделиться