template class axl::sl::Handle

#include <axl_sl_Handle.h>

template <
    typename T,
    typename Close = Void<T>,
    typename GetInvalidHandle = Zero<T>
    >
class Handle
{
public:
    // typedefs

    typedef T H;

    // construction

    Handle();
    Handle(T h);
    ~Handle();

    // methods

    operator T() const;

    T
    operator->() const;

    const Handle&
    operator=(T h);

    bool
    isOpen() const;

    void
    close();

    void
    attach(T h);

    T
    detach();

    T*
    p();

    static
    T
    getInvalidHandle();
};