title: error using static function deleter with std::unique_ptr
body: <p>I have the following code snippet that fails to compile...seems like it should, but it evading me right now. Greatly appreciate any help/suggestions!</p>
  
  <pre><code>#include &lt;atomic&gt;
  #include &lt;memory&gt;
  
  struct MyClass {
  
  static void free_lock(std::atomic&lt;int&gt;** lck) { (*lck)-&gt;store(0); }
  
  typedef std::unique_ptr&lt;std::atomic&lt;int&gt;*, decltype(&amp;MyClass::free_lock)&gt; lock_scope;
  
  static lock_scope get_lock() {
      static std::atomic&lt;int&gt; lck(0);
      int ref = 0;
      return lock_scope(&amp;lck, &amp;MyClass::free_lock);
  }
  
  };
  </code></pre>
  
  <p>The following error message was reported by Clang 3.2</p>
  
  <pre>
  Compilation finished with errors:
  source.cpp:13:23: error: no matching constructor for initialization of 'lock_scope' (aka 'unique_ptr *, decltype(&MyClass::free_lock)>')
          return lock_scope(&lck, &MyClass::free_lock);
                           ^          ~~~~~~~~~~~~~~~~~~~~~~~~~
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:130:7: note: candidate constructor not viable: no known conversion from 'std::atomic *' to 'pointer' (aka 'std::atomic **') for 1st argument
        unique_ptr(pointer __p,
        ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:125:7: note: candidate constructor not viable: no known conversion from 'std::atomic *' to 'pointer' (aka 'std::atomic **') for 1st argument
        unique_ptr(pointer __p,
        ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:155:2: note: candidate constructor template not viable: requires single argument '__u', but 2 arguments were provided
          unique_ptr(unique_ptr&& __u) noexcept
          ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:164:2: note: candidate constructor template not viable: requires single argument '__u', but 2 arguments were provided
          unique_ptr(auto_ptr&& __u) noexcept
          ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:114:17: note: candidate constructor not viable: requires 0 arguments, but 2 were provided
        constexpr unique_ptr() noexcept
                  ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:120:7: note: candidate constructor not viable: requires single argument '__p', but 2 arguments were provided
        unique_ptr(pointer __p) noexcept
        ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:136:17: note: candidate constructor not viable: requires 1 argument, but 2 were provided
        constexpr unique_ptr(nullptr_t) noexcept
                  ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:142:7: note: candidate constructor not viable: requires single argument '__u', but 2 arguments were provided
        unique_ptr(unique_ptr&& __u) noexcept
        ^
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/unique_ptr.h:262:7: note: candidate constructor not viable: requires 1 argument, but 2 were provided
        unique_ptr(const unique_ptr&) = delete;
        ^
  1 error generated.
  </pre>