How C++ is this code working?
<p>I have a strange bit of code. I must have been hitting my keyboard with my eyes closed because this type of thing is really dumb, but weird thing is, I caught it after the program ran successfully.</p>

<blockquote>
<pre><code>struct Number{
private:
  unsigned long longNumber;
public:

   Number(unsigned long n)
   {
      longNumber = n;
   }

  unsigned long getReverse()
  {
      /*some magic that returns an unsigned long */
  }

  inline
  unsigned long getLong()
  {
      return longNumber;  
  }
  inline
  static Number add(Number one, Number two)
  {
      return Number(one.getLong() + two.getLong());
  }
};


int main()
{
  scanf("%lu", n);
  Number number = Number(n);
  number = Number::add(number, number.getReverse());
  return 0;
}
</code></pre>
</blockquote>

<p>There's more stuff going on in main() of course and Number has few more members and functions, but this is what's important I believe.</p>

<p>If you look in main, you'll see that add() is being passed a Number and an unsigned long, but add() only accepts Number and Number.  </p>

<p>What's going on here?</p>

<p>EDIT: added constructor above</p>
