title: Supporting two integer constructors with different semantics
body: <p>I am designing a class that has two constructors with single integer arguments that have separate semantics.</p>
  
  <pre><code>template &lt;typename value_t&gt;
  class Numeric {
      value_t value_;
  public:
      Numeric(value_t value) : value_(value) {}
      Numeric(long l) { /* computes value_ from l */ }
      Numeric(double d) { /* computes value_ from d */ }
      Numeric(std::string bstring) { /* computes value_ from binary string */ }
      // ...
  };
  </code></pre>
  
  <p><code>value_t</code> <em>must</em> be an integral type in this case, it could even be an alias to <code>long</code> (in which case this wouldn't even compile). Even if it wasn't a type alias to <code>long</code>, I'm not so sure how integer promotions might confuse the two constructors.</p>
  
  <p>The idea is I want to support the user constructing by giving the underlying representation, <em>or</em> by giving it any possible numeric representation, which would then convert to the underlying representation (A.K.A <code>value_t</code>).</p>
  
  <p>What's the best way to segregate the constructors?</p>