library D { function double(uint self) public pure returns (uint) { return 2*self; } } contract C { using D for uint; function f(uint a) public pure { a.double; } }