typecons.Option: Implement toHash forwarder
This commit is contained in:
		@@ -338,6 +338,24 @@ struct Option(T)
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    version (D_Ddoc)
 | 
			
		||||
    {
 | 
			
		||||
        /**
 | 
			
		||||
         * If $(D_PARAM T) has a `toHash()` method, $(D_PSYMBOL Option) defines
 | 
			
		||||
         * `toHash()` which returns `T.toHash()` if it is set or 0 otherwise.
 | 
			
		||||
         *
 | 
			
		||||
         * Returns: Hash value.
 | 
			
		||||
         */
 | 
			
		||||
        size_t toHash() const;
 | 
			
		||||
    }
 | 
			
		||||
    else static if (is(typeof(T.init.toHash()) == size_t))
 | 
			
		||||
    {
 | 
			
		||||
        size_t toHash() const
 | 
			
		||||
        {
 | 
			
		||||
            return isNothing ? 0U : this.value.toHash();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    alias get this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -452,3 +470,23 @@ struct Option(T)
 | 
			
		||||
        assert(((ref e) => e)(Option!int().or(i)) == 5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Implements toHash() for nothing
 | 
			
		||||
@nogc nothrow pure @safe unittest
 | 
			
		||||
{
 | 
			
		||||
    static struct ToHash
 | 
			
		||||
    {
 | 
			
		||||
        size_t toHash() const @nogc nothrow pure @safe
 | 
			
		||||
        {
 | 
			
		||||
            return 1U;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        Option!ToHash toHash;
 | 
			
		||||
        assert(toHash.toHash() == 0U);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        auto toHash = Option!ToHash(ToHash());
 | 
			
		||||
        assert(toHash.toHash() == 1U);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user