gpt4 book ai didi

c++ - 怎么会?特征中未检测到别名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:55 27 4
gpt4 key购买 nike

问题很简单:看代码。两个静态断言都通过了。我不希望第二个通过。这是错误还是正常行为?

#include <array>
#include <type_traits>

template <template <class...> class Temp, class Specialization>
struct IsSpecialization : std::false_type {};

template <template <class...> class Temp, class... Ts>
struct IsSpecialization<Temp, Temp<Ts...>> : std::true_type {};

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

template <class...Args>
using AT = A<Args...>;


int main() {
static_assert(IsSpecialization<A, A<int>>{});
static_assert(!IsSpecialization<AT, AT<int>>{});
}

最佳答案

Temp当您尝试匹配偏特化时会被推导两次:

  • 通过匹配Temp反对AT .这平凡地推导出Temp成为AT .
  • 通过匹配Temp<Ts...>反对AT<int> .这推导出Temp成为A因为AT<int>相当于A<int> ,并且此推导永远不会推导出别名模板(请参阅 [temp.alias]/2 )。

整体推导成功 - 部分特化匹配 - 当且仅当这两个推导给出 Temp相同的值,即 iff ATA被认为是等价的。他们是否is currently an open question .

关于c++ - 怎么会?特征中未检测到别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48176789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com