为什么Clang更喜欢主模板而不是C++17的专业化?

以下程序是从这个问题中的代码减少的:

template <typename T, void (*)(T), typename = void>  
struct S;

template <typename T, void (*f)(T)>
struct S<T, f, void> {};

S<int const, nullptr> s;

在 GCC 的所有版本中,在所有语言版本中,实例化Ss都会选择的特化。

在所有版本的 Clang 中,但仅从 C++17 开始,在实例化s.

我认为值得注意的一些要点是,如果实例化结束<int, nullptr>,则永远不会选择主要参数,即不再是第一个参数int const。此外,如果第二个参数中的函数指针的签名不包含T作为参数,即如果第二个参数是T (*)()、 或void (*)(),则永远不会选择主参数。

如果此代码不是 IFNDR,那么哪个编译器是正确的?C++17 语言修订版中是否有一些重大变化?

以上是为什么Clang更喜欢主模板而不是C++17的专业化?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>