Boost C++ Libraries: Ticket #8992: A bouquet of implicit conversion compiler warnings https://svn.boost.org/trac10/ticket/8992 <p> The following (trivial?) warnings were kindly highlighted by clang <sup>(<a class="closed ticket" href="https://svn.boost.org/trac10/ticket/8992#version" title="#8992: Bugs: A bouquet of implicit conversion compiler warnings (closed: fixed)">version</a>)</sup> - using diagnostic options as indicated in the [...]. I based these on the 1.54.0 release, as svn rev. 85329 did not compile for me at the time. File locations are in the format path:line:byte-column. </p> <ul><li> boost/test/impl/framework.ipp:438:21 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'int' to 'unsigned int' [-Wsign-conversion] </p> <pre class="wiki"> std::srand( runtime_config::random_seed() ); ~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </pre></blockquote> <p> </p> <ul><li> boost/test/impl/exception_safety.ipp:404:46 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'unsigned int' to 'int' [-Wsign-conversion] </p> <pre class="wiki"> formatter &lt;&lt; std::left &lt;&lt; std::setw( indent ) &lt;&lt; ""; ~~~ ^~~~~~ </pre></blockquote> <p> </p> <ul><li> boost/test/impl/execution_monitor.ipp:249:72 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'typename error_info&lt;throw_line_, int&gt;::value_type' (aka 'int') to 'size_t' (aka 'unsigned long') [-Wsign-conversion] </p> <pre class="wiki"> extract&lt;throw_line&gt;( be ), ^~~~~~~~~~~~~~~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/impl/execution_monitor.ipp:761:18 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'int' to 'unsigned int' [-Wsign-conversion] </p> <pre class="wiki"> ::alarm( timeout ); ~~ ^~~~~~~ </pre></blockquote> <p> </p> <ul><li> boost/test/impl/plain_report_formatter.ipp:65:28 </li></ul><blockquote> <p> <strong>warning: implicit conversion loses integer precision</strong>: 'counter_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] </p> <pre class="wiki"> ostr &lt;&lt; std::setw( indent ) &lt;&lt; "" ~~~ ^~~~~~ </pre></blockquote> <ul><li> boost/test/impl/plain_report_formatter.ipp:115:24 </li></ul><blockquote> <p> <strong>warning: implicit conversion loses integer precision</strong>: 'counter_t' (aka 'unsigned long') to 'int' [-Wshorten-64-to-32] </p> <pre class="wiki"> ostr &lt;&lt; std::setw( m_indent ) &lt;&lt; "" ~~~ ^~~~~~~~ </pre></blockquote> <ul><li> boost/test/impl/unit_test_monitor.ipp:64:43 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'const unsigned int' to 'int' [-Wsign-conversion] </p> <pre class="wiki"> p_timeout.value = tc.p_timeout.get(); ~ ^~~~~~~~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/utils/runtime/cla/argv_traverser.ipp:79:58 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'long' to 'std::size_t' (aka 'unsigned long') [-Wsign-conversion] </p> <pre class="wiki"> BOOST_RT_PARAM_LITERAL( ' ' ) ) - m_remainder.get(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/utils/runtime/cla/argv_traverser.ipp:180:34 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'long' to 'std::size_t' (aka 'unsigned long') [-Wsign-conversion] </p> <pre class="wiki"> return m_work_buffer.begin() - m_commited_end; ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/utils/runtime/cla/named_parameter.ipp:116:27 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'long' to 'std::size_t' (aka 'unsigned long') [-Wsign-conversion] </p> <pre class="wiki"> tr.trim( mm_pos.first - in.begin() ); ~~ ~~~~~~~~~~~~~^~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/impl/unit_test_suite.ipp:143:28 </li></ul><blockquote> <p> <strong>warning: implicit conversion loses integer precision</strong>: 'const unsigned long' to 'unsigned int' [-Wshorten-64-to-32] </p> <pre class="wiki"> increase_exp_fail( tu-&gt;p_expected_failures ); ~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~ </pre></blockquote> <ul><li> boost/test/impl/unit_test_suite.ipp:146:32 </li></ul><blockquote> <p> <strong>warning: implicit conversion loses integer precision</strong>: 'counter_t' (aka 'unsigned long') to 'unsigned int' [-Wshorten-64-to-32] </p> <pre class="wiki"> tu-&gt;increase_exp_fail( expected_failures ); ~~ ^~~~~~~~~~~~~~~~~ </pre></blockquote> <p> My reading of the standard (5.2.6 [expr.post.incr] &amp; 5.2.1 [expr.sub]) suggests that clang may be at fault by complaining over the following: I include them for completeness - or to be enlightened if I missed something... :-) </p> <ul><li> boost/test/utils/runtime/cla/argv_traverser.ipp:193:33 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'std::size_t' (aka 'unsigned long') to 'std::ptrdiff_t' (aka 'long') [-Wsign-conversion] </p> <pre class="wiki"> m_remainder[m_remainder_size++] = p_separator; ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~^~ </pre></blockquote> <ul><li> boost/test/utils/runtime/cla/argv_traverser.ipp:80:24 </li></ul><blockquote> <p> <strong>warning: implicit conversion changes signedness</strong>: 'std::size_t' (aka 'unsigned long') to 'std::ptrdiff_t' (aka 'long') [-Wsign-conversion] </p> <pre class="wiki"> m_remainder[pos++] = BOOST_RT_PARAM_LITERAL( '\0' ); ~~~~~~~~~~~ ~~~^~ </pre></blockquote> <p> </p> <h4 class="section" id="clang--version"><span class="wikianchor" id="version">"clang --version"</span></h4> <pre class="wiki">Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) Target: x86_64-apple-darwin12.4.0 Thread model: posix </pre> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/8992 Trac 1.4.3 Gennadiy Rozental Tue, 07 Jul 2015 21:04:17 GMT status, milestone changed; resolution set https://svn.boost.org/trac10/ticket/8992#comment:1 https://svn.boost.org/trac10/ticket/8992#comment:1 <ul> <li><strong>status</strong> <span class="trac-field-old">new</span> → <span class="trac-field-new">closed</span> </li> <li><strong>resolution</strong> → <span class="trac-field-new">fixed</span> </li> <li><strong>milestone</strong> <span class="trac-field-old">To Be Determined</span> → <span class="trac-field-new">Boost 1.59.0</span> </li> </ul> <p> Most if not all of these are addressed </p> Ticket