Cast in contructors for c++ type
<p>I have the following c++ code:</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

    int main( int argc, char* argv[] )
    {
        const std::string s1 = "ddd";
        std::string s2( std::string( s1 ) );
        std::cout &lt;&lt; s2 &lt;&lt; std::endl;
    }
</code></pre>

<p>The result is:
1
Why?
When I use -Wall flag, compiler write warning: the address of ‘std::string s2(std::string)’ will always evaluate as ‘true’</p>

<p>But this code:</p>

<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

int main( int argc, char* argv[] )
{
    const std::string s1 = "ddd";
    std::string s2( ( std::string )( s1 ) );
    std::cout &lt;&lt; s2 &lt;&lt; std::endl;
}
</code></pre>

<p>The result:
ddd</p>

<p>It's normal result</p>
