Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Works with any value you can provide as an unsigned long template argument, in any base:</p> <pre><code>template&lt;unsigned B, unsigned long N&gt; struct base_digits_detail { enum { result = 1 + base_digits_detail&lt;B, N/B&gt;::result }; }; template&lt;unsigned B&gt; struct base_digits_detail&lt;B, 0&gt; { private: enum { result = 0 }; template&lt;unsigned, unsigned long&gt; friend class base_digits_detail; }; template&lt;unsigned B, unsigned long N&gt; struct base_digits { enum { result = base_digits_detail&lt;B, N&gt;::result }; }; template&lt;unsigned B&gt; struct base_digits&lt;B, 0&gt; { enum { result = 1 }; }; </code></pre> <h3>Test</h3> <pre><code>#include &lt;climits&gt; #include &lt;iostream&gt; int main() { std::cout &lt;&lt; base_digits&lt;10, 0&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;10, 1&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;10, 10&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;10, 100&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;10, 1000&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;10, UINT_MAX&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, 0&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, 01&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, 010&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, 0100&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, 01000&gt;::result &lt;&lt; '\n'; std::cout &lt;&lt; base_digits&lt;8, UINT_MAX&gt;::result &lt;&lt; '\n'; return 0; } </code></pre> <h3><a href="http://codepad.org/1avlPttJ" rel="nofollow noreferrer">Output</a></h3> <pre><code>1 1 2 3 4 10 1 1 2 3 4 11 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload