Boost C++ Libraries: Ticket #6016: Specializing tag_of is ambiguous with having a fusion tag https://svn.boost.org/trac10/ticket/6016 <p> The way tag_of is implemented, having both a specialization of tag_of and a fusion_tag typedef is ambiguous. </p> <p> This is problematic because it can prevent redefining Proto expressions as other types of fusion sequences for example. </p> <p> testcase: </p> <pre class="wiki">#include &lt;boost/fusion/include/tag_of.hpp&gt; struct my_tag {}; template&lt;class T&gt; struct my_type { typedef my_tag fusion_tag; }; namespace boost { namespace fusion { namespace traits { template&lt;class T&gt; struct tag_of&lt; my_type&lt;T&gt; &gt; { typedef my_tag type; }; } } } int main() { boost::fusion::traits::tag_of&lt;my_type&lt;int&gt; &gt;::type _; } </pre><p> To solve this problem, a two-level specialization system should be provided so that specialization is preferred over SFINAE. </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/6016 Trac 1.4.3 Joel de Guzman Thu, 13 Oct 2011 00:23:50 GMT status changed; resolution set https://svn.boost.org/trac10/ticket/6016#comment:1 https://svn.boost.org/trac10/ticket/6016#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> </ul> Ticket