相关疑难解决方法(0)

类模板特化优先级/歧义

在尝试实现依赖于可变参数模板的一些事情时,我偶然发现了一些我无法解释的事情.我将问题归结为以下代码片段:

template <typename ... Args>
struct A {};

template <template <typename...> class Z, typename T>
struct test;

template <template <typename...> class Z, typename T>
struct test<Z, Z<T>> {
    static void foo() {
        std::cout << "I'm more specialized than the variadic spec, hehe!" << std::endl;
    }
};

template <template <typename...> class Z, typename T, typename ... Args>
struct test<Z, Z<T, Args...>> {
    static void foo() {
        std::cout << "I'm variadic!" << std::endl;
    }
};

int main() {
    test<A, A<int>>::foo();
}
Run Code Online (Sandbox Code Playgroud)

在gcc下,它会产生错误,因为它在尝试实例化时认为两个特化都是同样专业的 …

c++ template-specialization language-lawyer variadic-templates c++11

16
推荐指数
1
解决办法
961
查看次数