模糊的部分模板专业化

peo*_*oro 6 c++ templates ambiguity specialization

我有一个特质课,我需要多次专攻(和部分特化).

一些部分专业化重叠:

template< typename T > struct C { };
template< typename T1, typename T2 > struct TRAIT { };

template< typename T > struct TRAIT< T, T > { };
template< typename T1, typename T2 > struct TRAIT< C<T1>, C<T2> > { };

int main( ) {
    // ERROR! could be both TRAIT<T,T>   [with T = C<int>]
    //                  and TRAIT<T1,T2> [with T1 = T2 = int]
    TRAIT< C<int>, C<int> > foo;
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

我怎么能用工作代码获得相同的结果?

我疯了同enable_ifis_same,我甚至不能确定了这是正确的方式...

Ada*_*erg 6

如果您无法避免重叠专业化,那么您最好的选择就是澄清所有重叠.你需要写另一个专业

template< typename T> struct TRAIT< C<T>, C<T> > { };
Run Code Online (Sandbox Code Playgroud)

......但是,正如其他人在评论中所说的那样,最好尽量避免重叠.正如其他人所说,问题可能不是重叠专业化,可能这不是解决问题的最佳方法.