【发布时间】:2020-04-23 09:52:35
【问题描述】:
template <class C>
C fnc();
template <>
int fnc(){return 0;}
template <class C>
C var;
template <>
int var = 0; // compile error
int main()
{
}
有一个fnc 函数的特化声明没有明确的类型指示(例如int fnc<int>()),所以模板参数的类型是从函数返回类型推导出来的,但是这对变量模板不起作用(它会导致编译器错误)。这是所有已测试的编译器(clang、gcc)中的正确行为还是错误?
【问题讨论】:
-
下一次,请在“错误”上进行搜索,以查看之前是否未提出过该问题,然后再询问(或至少 - 将其包含在问题中)。注意:从技术上讲,这不是错误。
-
这不是重复的,因为我对函数和变量声明之间的概念差异感兴趣
-
"这不是重复的,因为我对函数和变量声明之间的概念差异感兴趣" 1)你的问题没有提到这个。因此,对于一个问题,它仍然是重复的。 2)主要区别很明显:一个是函数,而另一个是变量。
-
@user3514538 根据链接帖子的回答,可以从函数参数类型推断,看来函数模板专业化也不应该起作用,它有没有论据。即使我不确定为什么 gcc 和 clang 接受它......
标签: c++ templates template-meta-programming template-specialization