http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60168
Bug ID: 60168 Summary: Incorrect check in ~unique_ptr() when Deleter::pointer type is not a pointer type Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ashish.sadanandan at gmail dot com The following compiles on both VS2013 and ICC 13.0.1 #include <memory> struct del { using pointer = int; void operator()(int) {} }; int main() { std::unique_ptr<int, del> p; } It fails on gcc4.8.1 with this error /usr/include/c++/4.8/bits/unique_ptr.h: In instantiation of 'std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = int; _Dp = del]': main.cpp:13:35: required from here /usr/include/c++/4.8/bits/unique_ptr.h:183:12: error: invalid operands of types 'int' and 'std::nullptr_t' to binary 'operator!=' if (__ptr != nullptr) I believe that last if statement should be if (__ptr != pointer())