相关疑难解决方法(0)

类模板特化部分排序和函数合成

选择哪个类模板特化的首选规则包括将特化重写为函数模板,并通过函数模板[temp.class.order]的排序规则确定哪个函数模板更加专业化.考虑这个例子,然后:

#include <iostream>

template <class T> struct voider { using type = void; };
template <class T> using void_t = typename voider<T>::type;

template <class T, class U> struct A { };

template <class T> int foo(A<T, void_t<T>> ) { return 1; }
template <class T> int foo(A<T*, void> )     { return 2; }

int main() {
    std::cout << foo(A<int*, void>{});
}
Run Code Online (Sandbox Code Playgroud)

gcc和clang都打印2在这里.这是有道理的一些前面的例子-推导对非推测的情况下(voidvoid_t<T>)只是忽略,所以推断<T, void_t<T>>反对<X*, void>成功,但推断<T*, void>针对<Y, void_t<Y>>在两个参数失败.精细. …

c++ templates partial-ordering language-lawyer

43
推荐指数
1
解决办法
1416
查看次数