C++ namespace ambiguity
<p>I have both <code>::tensor::contract</code> and <code>::tensor::detail::contract</code></p>

<pre><code>#include "tensor/detail/contract.hpp"

namespace tensor {


    template&lt;typename Alpha, class A, class B, typename Beta, class C&gt;
    void contract(Alpha alpha, A a, B b, Beta beta, C c) {
        detail::contract(alpha, a, b, beta, c);
    }

    template&lt;class A, class B, typename U = int&gt;
    struct contract_expression :
        expression&lt;contract_expression&lt;A,B,U&gt; &gt;
    {
        template&lt;typename T, class C&gt;
        void evaluate(T alpha, T beta, expression&lt;C&gt; &amp;c) const {
            contract(alpha*alpha_, a, b, beta, c); // ambiguity here
        };
    };
</code></pre>

<p>why do I get ambiguity in <code>contract_expression::evaluate</code>?  I am fairly certain there is no stray <code>using</code> directive.</p>

<p>error:</p>

<pre><code> ../../src/tensor/contract.hpp:12: note: candidates are: void tensor::contract(Alpha, A, B, Beta, C) [with Alpha = int, A = tensor::tensor_view&lt;boost::detail::multi_array::multi_array_view&lt;d\
ouble, 2u&gt;, boost::fusion::map&lt;tensor::index&lt;98, tensor::detail::index_range&gt;, tensor::index&lt;97, tensor::detail::index_range&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::voi\
d_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt;, B = tensor::tensor_view&lt;boost::detail::multi_array::multi_array_view&lt;dou\
ble, 3ul&gt;, boost::fusion::map&lt;tensor::index&lt;97, tensor::detail::index_range&gt;, tensor::index&lt;99, tensor::detail::index_range&gt;, tensor::index&lt;100, tensor::detail::index_range&gt;, boost::fusion:\
:void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt;, Beta = int, C = tensor::tensor_view&lt;boost::det\
ail::multi_array::multi_array_view&lt;double, 3ul&gt;, boost::fusion::map&lt;tensor::index&lt;98, tensor::detail::index_range&gt;, tensor::index&lt;99, tensor::detail::index_range&gt;, tensor::index&lt;100, tensor\
::detail::index_range&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt;]
../../src/tensor/detail/contract.hpp:109: note:                 void tensor::detail::contract(Alpha, A, B, Beta, C) [with Alpha = int, A = tensor::tensor_view&lt;boost::detail::multi_array::mu\
lti_array_view&lt;double, 2u&gt;, boost::fusion::map&lt;tensor::index&lt;98, tensor::detail::index_range&gt;, tensor::index&lt;97, tensor::detail::index_range&gt;, boost::fusion::void_, boost::fusion::void_, bo\
ost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt;, B = tensor::tensor_view&lt;boost::detail::multi_array::mult\
i_array_view&lt;double, 3ul&gt;, boost::fusion::map&lt;tensor::index&lt;97, tensor::detail::index_range&gt;, tensor::index&lt;99, tensor::detail::index_range&gt;, tensor::index&lt;100, tensor::detail::index_range&gt;\
, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_&gt; &gt;, Beta = int, C = tensor::tensor\
_view&lt;boost::detail::multi_array::multi_array_view&lt;double, 3ul&gt;, boost::fusion::map&lt;tensor::index&lt;98, tensor::detail::index_range&gt;, tensor::index&lt;99, tensor::detail::index_range&gt;, tensor::i\
ndex&lt;100, tensor::detail::index_range&gt;, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::vo\
id_&gt; &gt;]
</code></pre>
