用户自定义转换不能指定 return 类型

User-defined conversion cannot specify return type

我正在使用模板实现 unqiue 智能指针,但我一直收到编译器错误,提示用户定义转换无法指定 return 类型。下面是我的头文件和 cpp 文件的代码。错误发生在 .h 的第 15 行和 .cpp 的第 48 行我已经尝试使用模板而不是使用模板,但它也不起作用。

//header
#ifndef UNIQUE_SMART_POINTER_H
#define  UNIQUE_SMART_POINTER_H
#include <iostream> 
using namespace std;
template <typename T>
class UniqueSmartPointer
{
private:
    T *ptr;

public:
    UniqueSmartPointer(T * p = nullptr);
    UniqueSmartPointer(UniqueSmartPointer&ref);
    const T* get()const;
    T & operator* ();
    T * operator-> ();
    void reset(T *);
    T * release();
    bool operator bool();
    //void swap(T x);
    UniqueSmartPointer& operator=(UniqueSmartPointer& ref);
    UniqueSmartPointer& operator=(UniqueSmartPointer && ref);
};
#endif

这是 cpp

#include "UniqueSmartPointer.h"
#include <iostream>
using namespace std;
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(T * p): ptr(p)
{

}
template<typename T>
const T* UniqueSmartPointer<T>::get()const
{
    return ptr;
}
template<typename T>
T & UniqueSmartPointer<T>::operator* ()
{
    return *ptr;
}
template<typename T>
T *  UniqueSmartPointer<T>::operator-> ()
{
    return ptr;
}
template<typename T>
void UniqueSmartPointer<T>::reset(T * p)
{
    if (ptr)
    {
        delete ptr;
    }
    ptr = p;

}
template<typename T>
T * UniqueSmartPointer<T>::release()
{
    T * temp = ptr;
    ptr = nullptr;
    return temp;
}
template<typename T>
bool UniqueSmartPointer<T>::operator bool()
{
    if (ptr)
        return true;

    return false;
}
template<typename T>
UniqueSmartPointer<T>& UniqueSmartPointer<T>::operator=(UniqueSmartPointer& ref)
{
    if (*this == &ref)
        return *this;
    if (ptr)
        delete ptr;
    ptr = ref.ptr;
    ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(UniqueSmartPointer<T> &ref)
{
    ptr = ref.ptr;
    ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T> & UniqueSmartPointer<T>::operator=(UniqueSmartPointer<T> && ref)
{
    if (*this == &ref)
        return *this;
    if (ptr)
        delete ptr;

    ptr = ref.ptr;
    ref.ptr = nullptr;
}
bool operator bool();

应该只是:

/*explicit*/ operator bool() /*const*/;

等等

template<typename T>
UniqueSmartPointer<T>::operator bool() const
{
    return ptr != nullptr;
}