gpt4 book ai didi

C++1y/C++14 : Variable Template Specialization?

转载 作者:行者123 更新时间:2023-12-01 14:07:59 25 4
gpt4 key购买 nike

根据 C++1y/C++14 N3690,变量模板特化的类型是否必须与主模板的类型相同?

template<int x>
char y = f(x);

template<>
double y<42> = g();

如果是这样,是否有可能以某种方式使主要未定义?
template<int x>
???? y = ???; // undefined

template<>
double y<42> = g();

这在草案中的哪些地方?

类模板的等效功能是:
template<int x>
struct S
{
static char y;
};

template<>
struct S<42>
{
static double y;
};


template<int x>
struct S; // undefined

template<>
struct S<42>
{
static double y;
};

最佳答案

变量模板特化的类型是否必须与主模板的类型相同?

不,变量模板的显式(或部分)特化可以指定与隐式实例化隐含的类型不同的类型。在为 Clang 实现该功能时,我们发现规范没有要求在这种情况下匹配类型的规则,我们将问题提交给 C++ 核心工作组,在那里确认此遗漏是故意的。

是否有可能以某种方式使主要未定义?

在不指定类型的情况下声明主变量模板是不可能的——没有语法允许这样的事情。

这在草案中的哪些地方?

这两者都被省略——没有要求类型匹配的规则,也没有用于声明没有类型的变量模板的语法。所以我不能指出标准的任何特定部分并说“这是规则不存在的地方”。

如果您可以访问 C++ 标准委员会的反射器,请参阅以 core-23901 开头的线程以了解有关此问题的讨论。

关于C++1y/C++14 : Variable Template Specialization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63475623/

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